为什么使用os.walk()时目录中会出现奇怪的文件?

时间:2018-06-21 16:13:23

标签: python python-docx python-os

该项目是在Windows 10上用Pycharm编写的。

我编写了一个程序,该程序从目录中获取.docx文件并搜索信息。在文件名列表的末尾,我得到以下文件:“〜$ 640188.docx”

当我点击此文件时,我收到此错误:

  

引发BadZipfile,“文件不是zip文件”
  zipfile.BadZipfile:文件不是zip文件

当我尝试将文件'〜$ 640188.docx'放入docx2text方法过程中时,会发生此错误

text = docx2txt.process(r'C:\path\to\folder\~$640188.docx')

据我所见,此文件在我正在搜索的目录中或计算机上的任何位置都不存在。另一个奇怪的部分是,昨天我没有收到此错误。

我知道目录中有时会存在“隐藏”文件,我在Mac上遇到了以前的文件(特别是“ .DS_Store”),但这是一个.docx文件。

我目前有一个难看的解决方案,它说“如果您遇到'〜$ 640188.docx',请不要运行代码”。我担心的是,当我将11000个文件转储到目录中时,这将成为一个更大的问题。

此文件来自哪里?

下面是参考代码

import docx2txt 
import os

check_files = [] 
for dir, subdir, files in os.walk(r'C:\path\to\folder'):
    for file in files:
        check_files.append(file)

for file in check_files:
    print "file: {0}".format(file)
    text = docx2txt.process(r'C:\path\to\folder\{0}'.format(file))

1 个答案:

答案 0 :(得分:1)

以代字号开头的文件.docx文件是Word进程使用的临时Word文件,不需要始终具有正确的zip软件包结构。您可以跳过这些。检查文件名是否以'~'开头应该足够了。只需添加以下过滤条件即可:

check_files2 = [fl for fl in check_files if fl[0] != '~']
for file in check_files2: