问题描述
我有一个高度分支的文件夹结构,如下所示。我想匹配一个嵌套在其他描述符之间的条形码,并打开/读取该条形码文件夹中的相关文件。每个XXbarcodeXX文件夹的内容基本相同。
我尝试将but then
,with an argument that is resolved to *nothing* reports
和os.walk()
与glob.glob()
结合使用,但是没有一个产生正确的文件夹。和os.listdir()
刚刚返回了一个空列表,我认为这没有找到任何内容。
我没有让它最接近的bc似乎是自上而下遍历每个文件夹,而不是仅仅检查第二级中的文件夹名称。这花费了太长时间,因为第三和第四级中的某些文件夹具有数百个文件/文件夹。
fnmatch
解决方法
您正在使用的 *
正则表达式中的 re.match
可能会产生错误 (nothing to repeat at position 0
),因为它使用了一个没有任何前面标记的量词(零次或多次)。您可以尝试用 '..' + barcode + '..'
替换您的正则表达式。此正则表达式将在任意两个字符之间匹配您预期的 barcode
字符串(行终止符除外)。在命令 os.path.join
中,您可以在同一命令中加入所有路径名称和所需文件,以避免特定操作系统分隔符出现任何问题。
import os
import re
path='dirStructure'
barcode='barcode2'
for dirname,dirs,files in os.walk(path):
for folds in dirs:
if re.match('..' + barcode + '..',folds):
f = open(os.path.join(dirname,folds,'FileOfInterest.txt'),'r')
print(f.readlines())
f.close