使用os.walk()时,文件名随机损坏

时间:2018-03-26 09:00:52

标签: python filenames os.walk

我试图使用os.walk()获取文件夹中的所有文件,我使用的代码是:

#Define folder  and pattern to find
rootPath = "./root_folder"
pattern = "*MATCH*"

#Look for all the files with "MATCH" on its file name
Final_List = []

for root, dirs, files in os.walk(rootPath):
    for filename in fnmatch.filter(files, pattern):
        Final_List.append(os.path.join(root, filename))
        print(root,"\\", filename)

我试图通过打印根和文件名(如下所示)来解决问题,但是偶尔会出现一个损坏的"文件名"喜欢" File4 name.rtf"。我有和#34;〜$ le4 name.rtf"相同文件的另一个版本。问题是在这一步之后,我正在读取所有文件以提取文本,但是我在使用"〜$"读取这些文件时出错了。在名字的开头。

下面,我试图涵盖文件名的所有不同配置,其中一些有"。",其他有" - ",其他有空格" "等等。

./root_folder\folder1 \ File1 name E. example.docx
./root_folder\folder1 \ File2 name_.docx
./root_folder\folder1 \ File4 name.rtf
./root_folder\folder1\inside_folder1 \ File3 name example.rtf
./root_folder\folder2 \ File4 name.rtf
./root_folder\folder2 \ File5 name another-example.rtf
./root_folder\folder2 \ ~$le4 name.rtf
./root_folder\folder2 \ File6 name.another.example.pdf

我一直在寻找文件中的模式,看看它是否与文件名或目录名相关,但它看起来并不像。我还将其复制粘贴到其他文件夹中的某个已损坏的文件(即" File4 name.rtf"),并且它工作正常,在其他文件夹中可以正确读取相同的文件。

任何提示?谢谢!

1 个答案:

答案 0 :(得分:1)

我的猜测是那些文件存在,但是被Windows资源管理器隐藏了。

this.$attrs不会过滤这些文件。它只会过滤os.walk.

..开头的文件是Microsoft Word备份文件。当Word打开文件时,它会创建相同的文件名,但是对于2个第一个字符,~$

(唯一奇怪的事实是这些备份通常是可见的,好吧......)

如果Word崩溃或被杀死,则此备份文件仍然存在。

你应该忽略它们。例如,通过改变这样的模式:

~$

或添加:

pattern = "[!~][!$]*MATCH*.rtf"
循环中的

(模式过滤不完全相同,因为它会过滤以if not filename.startswith("~$"): 开头的文件,但不会跟~,但它非常接近。