0

根据 python 文档zipfile.is_zipfile(filename)函数,如果文件名是有效的 ZIP 文件,则返回 True,否则返回 False。

我编写了如下脚本,最初传递了一个参数并得到“False”,但对于其他有效参数,我也一直在得到False

脚本:

import zipfile

for filename in [ r'D:\Python_Programs\B1', r'D:\Python_Programs\B2', r'D:\Python_Programs\B1+B2\20130105\144145_1.zip', 'NEWS.txt']:
    print (filename, zipfile.is_zipfile(filename))

结果:

D:\Python_Programs\B1 False
D:\Python_Programs\B2 False
D:\Python_Programs\B1+B2\20130105\144145_1.zip False
NEWS.txt False

任何人都可以帮助我为什么我每次都得到 False ?

4

1 回答 1

2

正如评论所确定的那样,is_zipfile正在返回,False因为该文件实际上不是 zip 文件——它是一个伪装的 RAR 文件。文件扩展名可能会在不知不觉中被更改。WinRAR 能够同时处理 zip 和 RAR 文件,因此无论文件的实际扩展名如何,它都可以打开文件,但仅处理 zip 文件的程序无法打开它。

文件类型通常可以通过检查文件的前几个字节并寻找各种所谓的魔术常量来识别。这正是 Unix 实用程序的目的file(1)。一个 zip 文件通常由开头的两个魔术字节PK(更具体地说,四个字节 0x50 0x4B 0x74 0x08)标识,尽管 zip 文件有一个特殊属性,即它们实际上是由末尾的特定数据结构标识的文件。其结果是一些有趣的隐写技术,例如这个技巧。但在实践中你不会经常看到这种情况——几乎所有(如果不是全部)标准 zip 工具都会创建以 .zip 开头的 zip 文件PK

于 2013-01-06T05:29:56.810 回答