首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用一个列表来迭代和组合对象,以使用python查找具有两个扩展名的文件

使用一个列表来迭代和组合对象,以使用python查找具有两个扩展名的文件
EN

Stack Overflow用户
提问于 2020-11-26 20:40:51
回答 1查看 45关注 0票数 1

我想将一个可能的扩展列表迭代到两个变量中,以查找所有可能的匹配。

使用bash,这可以部分实现,如下所示:

代码语言:javascript
复制
while read ext; do
   find $DIR -type f -name "*.$ext.*"
done < extensions.txt

while read ext; do
   find $DIR -type f -name "*.*.$ext"
done < extensions.txt

其中,extensions.txt包含:

代码语言:javascript
复制
phar
php
pl
py
cgi
asp
js
html
htm
phtml
txt
gif

但我想要实现的是只组合这一个列表的扩展。例如,我希望查找像filename.php.txtfilename.html.gif这样的文件,而不是像filename.random.extension这样的任何类型,因为这会输出太多的文件。

有人能帮个忙吗?

到目前为止,我已经用说明尝试过了

我在名为filename.php.txt的目录/some/www/path/html/中放置了一个文件,并运行以下脚本

代码语言:javascript
复制
#!/usr/bin/python

from glob import glob

with open('/root/scan-files/extensions.txt', 'r') as f:
    exts = f.readlines()

for file in glob("/some/www/path/html/*.*.*"):
    if all(i in exts for i in file.split('.')[1:]):
        print(file)

并且没有输出。它应该已经在该路径中找到了filename.php.txt

已尝试调试:

代码语言:javascript
复制
python -m pdb find-malicious-extensions.py 
> /root/scan-files/find-malicious-extensions.py(3)<module>()
-> from glob import glob
(Pdb) n
> /root/scan-files/find-malicious-extensions.py(5)<module>()
-> with open('/root/scan-files/extensions.txt', 'r') as f:
(Pdb) n
> /root/scan-files/find-malicious-extensions.py(6)<module>()
-> exts = f.readlines()
(Pdb) n
> /root/scan-files/find-malicious-extensions.py(8)<module>()
-> for file in glob("/some/www/path/html/*.*.*"):
(Pdb) n
> /root/scan-files/find-malicious-extensions.py(9)<module>()
-> if all(i in exts for i in file.split('.')[1:]):
(Pdb) n
> /root/scan-files/find-malicious-extensions.py(8)<module>()
-> for file in glob("/some/www/path/html/*.*.*"):
(Pdb) n
--Return--
> /root/scan-files/find-malicious-extensions.py(8)<module>()->None
-> for file in glob("/some/www/path/html/*.*.*"):
(Pdb) n
--Return--
> <string>(1)<module>()->None
(Pdb) n
The program finished and will be restarted

你知道哪里出问题了吗?

EN

回答 1

Stack Overflow用户

发布于 2020-11-26 20:51:34

下面是如何使用glob模块中的glob方法:

代码语言:javascript
复制
from glob import glob

with open('extensions.txt', 'r') as f:
    exts = f.readlines()

for file in glob("*.*.*"):
    if all(i in exts for i in file.split('.')[1:]):
        print(file)

将其分解:

  1. glob模块导入glob方法:

代码语言:javascript
复制
from glob import glob

  1. 打开extensions.txt文件并将所有扩展名存储在一个列表中:

代码语言:javascript
复制
with open('extensions.txt', 'r') as f:
    exts = f.readlines()

  1. 遍历当前目录中名称中至少有两个点的所有文件:

代码语言:javascript
复制
for file in glob("*.*.*"):

  1. 将每个文件的名称分成一个点,并检查除第一个字符串之外的所有字符串是否都在有效的扩展名中。如果是,则打印文件的名称:

代码语言:javascript
复制
    if all(i in exts for i in file.split('.')[1:]):
        print(file)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65022245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档