如何使用 fnmatch 检查字符串特定位置的模式?
How to use fnmatch to check pattern at specific position of string?
我有一个文件夹(称之为 F
),其子文件夹的名称格式为 yyyy.doy(例如 2020.001 表示 2020 年一月一日)。在每个子文件夹中是多个仪器的文件。每个文件在第 16、17 和 18 个字符中指定它用于哪个仪器(仪器 1 的文件将有一个文件为 xxxxxxxxxxxxxxx001xxxxx)。我正在尝试使用 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')
似乎在语法上失败。谁能帮我重新格式化上面的代码或建议更好的方法来创建我的列表?请记住,列表需要包含每个文件的完整文件路径和名称,但要包含单独的工具。
您不需要 fnmatch.filter
来执行此操作,只需要一个相对基本的 Python os.path
实用程序来拆分文件名和文件扩展名,以及一个条件 generator expression.
这就是我的意思。
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)
我有一个文件夹(称之为 F
),其子文件夹的名称格式为 yyyy.doy(例如 2020.001 表示 2020 年一月一日)。在每个子文件夹中是多个仪器的文件。每个文件在第 16、17 和 18 个字符中指定它用于哪个仪器(仪器 1 的文件将有一个文件为 xxxxxxxxxxxxxxx001xxxxx)。我正在尝试使用 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')
似乎在语法上失败。谁能帮我重新格式化上面的代码或建议更好的方法来创建我的列表?请记住,列表需要包含每个文件的完整文件路径和名称,但要包含单独的工具。
您不需要 fnmatch.filter
来执行此操作,只需要一个相对基本的 Python os.path
实用程序来拆分文件名和文件扩展名,以及一个条件 generator expression.
这就是我的意思。
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)