python - 为什么使用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))
解决方案
以波浪号开头的文件.docx
是 Word 进程使用的临时 Word 文件,不需要始终具有正确的 zip 包结构。你会很好地跳过那些。检查文件名是否以开头'~'
应该足够好。只需添加以下过滤:
check_files2 = [fl for fl in check_files if fl[0] != '~']
for file in check_files2:
推荐阅读
- java - 当数字输入大于 100 时,如何重现此模式?
- r - R中的基本矩阵乘法函数
- texmaker - TexMaker 在打开/保存窗口中仅显示正方形
- python - BeautifulSoup 抓取 span class="value"
- elasticsearch - 为什么弹性索引存储大小增加而更新的索引不插入?
- objective-c - 具有 resizableImageWithCapInsets 的 UIImage 在暗模式下不响应
- javascript - 如何使用 Javascript 在 Outlook 中安排约会?
- react-native - React Native - 两次启动动画,未定义的错误启动
- javascript - 如何设置距离 amchart 折线图工具提示
- c - CMake 编译在 MSYS2 上失败