首页 > 解决方案 > 为什么使用os.walk()时目录中会出现一个奇怪的文件?

问题描述

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

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

当它碰到这个文件时我得到这个错误:

raise BadZipfile, "File is not a zip file"
zipfile.BadZipfile: File is not a zip file

当我尝试将文件 '~$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))

标签: pythonpython-docxpython-os

解决方案


以波浪号开头的文件.docx是 Word 进程使用的临时 Word 文件,不需要始终具有正确的 zip 包结构。你会很好地跳过那些。检查文件名是否以开头'~'应该足够好。只需添加以下过滤:

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

推荐阅读