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

Why Does a Strange File Shows Up in Directory When Using os.walk()?

项目写在 Pycharm Windows 10.

我编写了一个从目录中抓取 .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\~0188.docx')

据我所知,该文件不存在于我正在搜索的目录中,也不存在于我的计算机上的任何位置。另一个 st运行ge 部分是昨天我没有收到这个错误。

我知道有时目录中有 "hidden" 文件,我 运行 到我的 mac 之前的文件中(特别是 '.DS_Store'),但这是一个.docx 文件。

我目前有一个丑陋的解决方案,它说 "don't run the code if you run into '~0188.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))

~$ 开头的隐藏 .docx 文件只是 Word 在主动打开和编辑文件时创建的临时文件 – 相应父文件名的前两个字符替换为~$。一旦您保存并关闭文档,它们通常会被删除,但有时它们会在您退出后仍然存在。由于它们被设计为对适当 .docx 文件的临时补充,因此它们不需要始终具有正确的 zip 包结构。

你最好跳过这些。检查文件名是否以 '~' 开头应该就足够了。只需添加以下过滤:

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