0

我有一个文件夹(称为它F),其中包含名称格式为 yyyy.doy 的子文件夹(例如 2020.001 表示 2020 年 1 月 1 日)。每个子文件夹中都有多个仪器的文件。每个文件在第 16、17 和 18 个字符中指定它用于哪个仪器(来自仪器 1 的文件的文件为 xxxxxxxxxxxxxxx001xxxxxx)。我正在尝试使用 python 脚本为每个仪器创建文件名和路径列表。

如果我只查看我可以使用的子文件夹之一:

filelist=[]
for name in glob.glob('2020.001/*.001*'):
    print(name)
    filelist.append(name)

对于第一个乐器。但是,我想搜索所有子文件夹。根据我在网上找到的内容,我无法使用 glob 的递归子文件夹搜索来执行此操作,因为我的 python 版本是 2.7。我想做的是使用fnmatch下面的格式(从另一个堆栈溢出页面复制),但专门搜索第 16、17 和 18 个字符。

filelist = [os.path.join(dirpath, f)
for dirpath, dirnames, files in os.walk(folderpath)
    for f in fnmatch.filter(files, [16:19]=='.001')]

这段代码的最后一部分(files, [16:19]=='.001')似乎在语法上失败了。谁能帮我重新格式化上面的代码或建议一种更好的方法来创建我的列表?请记住,列表需要包含每个文件的完整文件路径和名称,但单独的仪器。

4

1 回答 1

1

您不需fnmatch.filter要这样做,只需要一个相对基本的 Pythonos.path实用程序来将文件名与文件扩展名分开,以及一个条件生成器表达式

这就是我的意思。

import os

dirpath = './instrument_files'

for dirpath, dirnames, files in os.walk(dirpath):
    for f in (file for file in files 
                if os.path.splitext(file)[1].startswith('.001')):
        print(f)
于 2020-10-16T22:16:59.863 回答