0

Pythonのドキュメントによるzipfile.is_zipfile(filename)と、ファイル名が有効なZIPファイルの場合はTrueを返し、そうでない場合はFalseを返します。

私は以下のようにスクリプトを作成し、最初に1つの引数を渡して、結果として「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

コメントから判断すると、このファイルは実際には zip ファイルではなく、変装した RAR ファイルであるため、is_zipfile返されます。Falseファイル拡張子は、無意識に変更される可能性があります。WinRAR は zip ファイルと RAR ファイルの両方を処理できるため、実際の拡張子に関係なくファイルを開くことができますが、zip ファイルのみを処理するプログラムでは開くことができません。

ファイルの種類は通常、ファイルの最初の数バイトを調べて、さまざまないわゆるマジック定数を探すことで識別できます。これはまさに Unix ユーティリティの目的ですfile(1)。zip ファイルは通常、先頭の 2 つのマジック バイトPK(より具体的には 0x50 0x4B 0x74 0x08 の 4 バイト) によって識別されますが、zip ファイルには、実際には末尾の特定のデータ構造によって識別されるという特別なプロパティがあります。ファイル。その結果、このトリックのような興味深いステガノグラフィー手法が生まれます。しかし、実際にはそう頻繁に見られることはありません。ほぼすべての (すべてではないにしても) 標準の zip ツールは、.zip で始まる zip ファイルを作成しますPK

于 2013-01-06T05:29:56.810 に答える