zipfile.BadZipFile: File is not a zip file 读取的是docx文件
时间: 2024-12-28 15:20:51 浏览: 10
### 解决读取 DOCX 文件时出现 `zipfile.BadZipFile` 错误的方法
当遇到 `zipfile.BadZipFile: File is not a zip file` 这样的错误提示时,通常意味着程序尝试打开的文件并非有效的 ZIP 文件。DOCX 文件本质上是一个压缩包,因此任何破坏其结构的操作都可能导致此错误。
#### 原因分析
- **临时文件干扰**:类似于 Excel 文件的情况,某些应用程序可能会在保存过程中创建临时文件(如 `.~$filename.docx`),这些文件并不是真正的 DOCX 文档[^1]。
- **损坏或不完整的文件**:如果文件传输中断或者存储介质出现问题,则可能造成文件损坏而不符合标准格式。
#### 处理方案
为了防止加载到无效文件并引发异常,可以在遍历目录中的所有 .docx 文件之前加入额外检查逻辑:
```python
import os
from zipfile import BadZipFile, ZipFile
def validate_docx(file_path):
try:
with ZipFile(file_path) as zf:
# 尝试访问ZIP内部成员来验证有效性
_ = [name for name in zf.namelist()]
return True
except (BadZipFile, FileNotFoundError):
print(f"{file_path} 不是有效DOCX文件")
return False
folder_path = 'path/to/your/folder'
valid_files = []
for root, dirs, files in os.walk(folder_path):
for f in files:
if f.endswith(".docx") and not f.startswith("~$"):
full_path = os.path.join(root, f)
if validate_docx(full_path):
valid_files.append(full_path)
print(valid_files)
```
上述代码片段展示了如何过滤掉那些可能是临时副本或其他原因造成的非正常 DOCX 文件,并只保留真正可用的文档列表用于后续操作。
阅读全文