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

Filename is getting corrupted randomly when using 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)

我正在尝试通过打印根目录和文件名(如下所示)来调试问题,但时不时地会出现损坏的 "filename",例如 "File4 name.rtf"。我有与“~$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"),并且工作正常,在其他文件夹中可以正确读取相同的文件。

有什么提示吗?谢谢!

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

但是 os.walk 不过滤那些文件。它只过滤 ....

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

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

如果 Word 崩溃或被终止,此备份文件将保留。

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

pattern = "[!~][!$]*MATCH*.rtf"

或添加:

if not filename.startswith("~$"):

在你的循环中

(模式过滤不完全相同,因为它会过滤以 ~ 开头但不后跟 $ 的文件,但它非常接近。