使用 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("~$"):
在你的循环中
(模式过滤不完全相同,因为它会过滤以 ~
开头但不后跟 $
的文件,但它非常接近。
我正在尝试使用 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("~$"):
在你的循环中
(模式过滤不完全相同,因为它会过滤以 ~
开头但不后跟 $
的文件,但它非常接近。