我有以下脚本来搜索Python
13 def list_xml_reports(d, extensions):
14 matches = []
15 print extensions
16 for root, dirname, filenames in os.walk(d):
17 for extension in extensions:
18 for filename in fnmatch.filter(filenames, extension):
19 matches.append(os.path.join(root, filename))
20 return set(matches)
21
22 print list_xml_reports("/root/my_dir", ("*junitReport.xml"))
但是,不是只返回以*junitReport.xml
结尾的文件,而是向我返回所有内容(*.log
,*build.xml
,*.txt
,*changelog.xml
)。 ..为什么会这样?
答案 0 :(得分:1)
表达式("*junitReport.xml")
与"*junitReport.xml"
相同。请添加逗号("*junitReport.xml",)
或将其转换为列表["*junitReport.xml"]
。
发生了什么extensions
获得了值"*junitReport.xml"
,当您循环播放时,extension
取值'*','j','u',......
第一个值'*'匹配所有内容。
答案 1 :(得分:0)
我将使用python的模块os
:
我的文件位于目录/Users/ach/Documents/Data_Science/img/
优雅版本:
import os
DIR_WITH_FILES='/Users/ach/Documents/Data_Science/img'
list_png=[f for f in sorted(os.listdir(DIR_WITH_FILES)) if (str(f))[-3:] == "png"]
list_png_with_path=[DIR_WITH_FILES+'/'+str(f) for f in list_png]
逐步操作:
代码_1 :导入 os
并提供文件所在目录的路径
import os
print(os.getcwd())
MY_WORKING_DIRECTORY=os.getcwd()
!ls
DIR_WITH_FILES=MY_WORKING_DIRECTORY+'/img/'
print(DIR_WITH_FILES)
输出_1 :
Users/ach/Documents/Data_Science
img notebooks
/Users/ach/Documents/Data_Science/img/
代码_2 :列出目录DIR_WITH_FILES=/Users/ach/Documents/Data_Science/img
files=sorted(os.listdir(DIR_WITH_FILES))
print(files)
输出_2 :
['fig_0.png', 'fig_describe_target_0.png', 'fig_describe_target_1.png', 'test.txt']
code_3 :创建两个带有扩展名png
=> list_png
的文件名的列表,以及另一个带有文件名及其路径=的列表> list_png_with_path
:
list_png=[]
list_png_with_path=[]
for f in sorted(os.listdir(DIR_WITH_FILES)):
if (str(f))[-3:] == "png":
list_png.append(f)
png_with_path=DIR_WITH_FILES+str(f)
list_png_with_path.append(png_with_path)
print(list_png)
print(list_png_with_path)
output_3 :
['fig_0.png', 'fig_describe_target_0.png', 'fig_describe_target_1.png']
['/Users/ach/Documents/Data_Science/img/fig_0.png', '/Users/ach/Documents/Data_Science/img/fig_describe_target_0.png', '/Users/ach/Documents/Data_Science/img/fig_describe_target_1.png']
您可以看到列表中没有包含文件'test.txt'
。
如果您要过滤多个扩展名,只需遍历 code_3