仅过滤特定扩展名中的文件 - Python

时间:2015-05-12 18:58:14

标签: python xml

我有以下脚本来搜索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)。 ..为什么会这样?

2 个答案:

答案 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/

版本1:

优雅版本:

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]  

版本2:

逐步操作:

代码_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

您还可以检查:Get a filtered list of files in a directory