当前位置: 首页 > 知识库问答 >
问题:

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

苏建安
2023-03-14

我试图使用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”。我有与“~$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个答案

陶富
2023-03-14

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

但是,os.walk不会过滤这些文件。它只是过滤

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

(唯一奇怪的事实是,那些备份通常是可见的,嗯,...)

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

你应该忽略它们。例如,通过如下方式更改模式:

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

或加入:

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

在你的圈子里

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

 类似资料:
  • 问题内容: 我试图在此处修改@BalusC优秀教程,以发送gzip压缩文件。这是一个有效的java类: 您必须编辑和字段,并在URL中设置一个servlet-其方法是: 现在,当field设置为true时,FILENAME会被正确压缩并发送到服务器,但是当我尝试将其提取时,它已损坏(我在Windows上使用7z,它将打开gzip文件作为存档,但是当我尝试将文件提取到 内部时 , gzip归档文件说

  • 问题内容: 我试图在此处修改@BalusC优秀教程,以发送gzip压缩文件。这是一个有效的java类: 您必须编辑和字段,并在URL中设置一个servlet-其方法是: 现在,当field设置为true时,FILENAME会被正确压缩并发送到服务器,但是当我尝试将其提取时,它已损坏(我在Windows上使用7z,它将打开gzip文件作为存档,但是当我尝试将文件提取到 内部时 , gzip归档文件说

  • 问题内容: 我正在使用角度$ http从服务器下载文件。文件类型可以不同。我应该设置请求标头以进行身份​​验证。下载完成后,文件已损坏!这是我在客户端保存文件的代码: 问题答案: 我最终通过将以下配置添加到ajax请求中解决了该问题: 并将Blob类型更改为 “应用程序/八位字节流”

  • 有什么想法可以解决我的问题吗? 谢谢,提前。

  • 主要内容:文件定位函数rewind和fseek,文件的随机读写前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据。但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置 指针,再进行读写。这种读写方式称为 随机读写,也就是说从文件的任意位置开始读写。 实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。 文件定位函数rewind和fseek 移动文件内部位置指针的函数主要有两个,即 rewind(

  • 我正在尝试创建一个zip文件,以便能够通过http发送多个文件。 我的问题是,生成的Zip文件在发送之前和之后都“损坏”。问题是我无法找到我做错了什么,因为我在控制台中没有收到任何错误。 那么,有人有一个想法文件我生成的zip文件损坏? 这是我的代码: 谢谢你的帮助!