使用glob python读取具有特定扩展名的目录中的所有文件

时间:2018-06-04 15:10:12

标签: python file glob

我有一个目录,其中包含更多子目录,每个目录都包含具有特定扩展名的文件。我可以使用glob函数获取所有文件的名称:

for name in glob.glob('*/*[a-b]*'):
      print(os.path.basename(name))

打印我在所有子目录中的文件名称:

PF44_aa
PF52_aa
PF95_aa
PF38_aa
PF45_aa
PF63_aa
PF68_aa
PF39_aa

但是,如果我将这些文件名作为参数传递以打开文件并阅读内容:

for name in glob.glob('*/*[a-b]*'):
    filename=os.path.basename(name)
    with open('%s' %filename) as fn:
        content = fn.readlines() 

我收到以下错误:

 File "<ipython-input-194-147f38fc2684>", line 1, in <module>
    with open('%s' %filename) as fn:

FileNotFoundError: [Errno 2] No such file or directory: 'PF44_aa'

我还尝试直接将文件名作为输入而不是%s

for name in glob.glob('*/*[a-b]*'):
    filename=os.path.basename(name)
    with open(filename) as fn:
        content = fn.readlines() 

但仍然有同样的错误:

File "<ipython-input-193-fb125b5aa813>", line 1, in <module>
    with open(filename) as fn:

FileNotFoundError: [Errno 2] No such file or directory: 'PF44_aa'

我做错了什么,如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

你必须使用文件的完整路径来打开它,你不能只使用文件名,除非它与你的python文件在同一目录下。因此,您必须对脚本进行少量更改才能使其正常工作。

for name in glob.glob('*/*[a-b]*'):
    with open(name) as fn:
        content = fn.readlines()

filename被名称替换 在这里,name =文件的完整路径。

答案 1 :(得分:0)

替代方法......

首先导入:

import shutil
import os

然后将目录分配到列表:

file_list = []    
file_list = os.listdir('C:/filepath')

现在区分文件:

files = []
files = [x for x in file_list if "_aa" in x]

现在,您可以使用您的方法打开并阅读文件列表中的文件。

但是:

filepath + filename
with open(filepath + filename) as fn:
content = fn.readlines() 

目前您只是尝试使用其名称打开文件,您需要包含完整的文件路径......

结果:

"C:/filepath/PF44_aa"