Pythonのzipfileモジュールの使用詳細

5001 ワード

zipファイルフォーマットは一般的なドキュメント圧縮規格で、ziplibモジュールではZipFileクラスを使用してzipファイルを操作します.以下、class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
zipファイルを表すZipFileオブジェクトを作成します.パラメータfileはファイルのパスまたはクラスファイルオブジェクト(file-like object)を表します.パラメータmodeはzipファイルを開くモードを示し、デフォルト値は'r'で、既存のzipファイルを読むか、'w'または'a'であるか、'w'は新しいzipドキュメントを作成するか、既存のzipドキュメントを上書きするか、'a'は既存のzipドキュメントにデータを添付することを示します.パラメータcompressionはzipドキュメントを書く際に使用する圧縮方法を表し、その値はzipfile.ZIP_STOREDまたはzipfile.ZIP_DEFLATED.操作するzipファイルのサイズが2 Gを超える場合は、allowZip 64をTrueに設定します.
ZipFileはまた、ZipFile.getinfo(name):
zipドキュメント内の指定ファイルの情報を取得します.zipfileを返します.ファイルの詳細を含むZipInfoオブジェクト.このオブジェクトについては、以下で具体的に説明します.ZipFile.infolist()
zipドキュメント内のすべてのファイルの情報を取得し、zipfileを返します.ZipInfoのリスト.ZipFile.namelist()
zipドキュメント内のすべてのファイルの名前リストを取得します.ZipFile.extract(member[, path[, pwd]])
zipドキュメント内の指定ファイルを現在のディレクトリに解凍します.パラメータmember解凍するファイル名または対応するZipInfoオブジェクトを指定します.パラメータpathは解析ファイルが保存するフォルダを指定します.パラメータpwdは解凍パスワードです.次の例では、プログラムルートディレクトリの下に保存するtxtを示す.zip内のすべてのファイルをD:/Workディレクトリに解凍します.

import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))
for file in zipFile.namelist():
  zipFile.extract(file, r'd:/Work')
zipFile.close()
ZipFile.extractall([path[, members[, pwd]]])

zipドキュメントのすべてのファイルを現在のディレクトリに解凍します.パラメータmembersのデフォルト値はzipドキュメント内のすべてのファイル名リストです.自分で設定して、解凍するファイル名を選択することもできます.ZipFile.printdir()
zipドキュメント内の情報をコンソールに印刷します.ZipFile.setpassword(pwd)
zipドキュメントのパスワードを設定します.ZipFile.read(name[, pwd])
zipドキュメント内の指定ファイルのバイナリデータを取得します.次の例では、zipドキュメントにtxtを含むread()の使用を示す.txtのテキストファイルは、read()メソッドでそのバイナリデータを読み出し、D:/txtに保存する.txt.  

#coding=gbk
import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))
data = zipFile.read('txt.txt')
(lambda f, d: (f.write(d), f.close()))(open(r'd:/txt.txt', 'wb'), data) 
#             。     ~_~
zipFile.close()
ZipFile.write(filename[, arcname[, compress_type]])

指定したファイルをzipドキュメントに追加します.filenameはファイルパス、arcnameはzipドキュメントに追加した後に保存する名前、パラメータcompress_typeは圧縮方法を表し、その値はzipfile.ZIP_STOREDまたはzipfile.ZIP_DEFLATED.次の例では、zipドキュメントを作成し、ファイルD:/testを作成する方法を示します.docを圧縮ドキュメントに追加します. 

import zipfile, os
zipFile = zipfile.ZipFile(r'D:/test.zip'), 'w')
zipFile.write(r'D:/test.doc', 'ok.doc', zipfile.ZIP_DEFLATED)
zipFile.close()
ZipFile.writestr(zinfo_or_arcname, bytes)

writestr()は、圧縮ドキュメントにバイナリデータを直接書き込むことをサポートします.Class ZipInfo
ZipFile.getinfo(name)メソッドは、zipドキュメント内の対応するファイルの情報を表すZipInfoオブジェクトを返します.次のプロパティがサポートされています.
  • ZipInfo.filename:ファイル名を取得します.
  • ZipInfo.date_time:ファイルの最終変更時間を取得します.6つの要素を含むメタグループを返します:(年、月、日、時、分、秒)
  • ZipInfo.compress_type:圧縮タイプ.
  • ZipInfo.コメント:ドキュメントの説明.
  • ZipInfo.extr:拡張項目データ.
  • ZipInfo.create_System:zipドキュメントを作成するシステムを取得します.
  • ZipInfo.create_バージョン:zipドキュメントを作成するPKZIPバージョンを取得します.
  • ZipInfo.extract_バージョン:zipドキュメントを解凍するために必要なPKZIPバージョンを取得します.
  • ZipInfo.reserved:フィールドを予約し、現在のインプリメンテーションは常に0を返します.
  • ZipInfo.flag_bits:zipフラグビット.
  • ZipInfo.volume:ファイルヘッダのボリュームラベル.
  • ZipInfo.internal_attr:内部プロパティ.
  • ZipInfo.external_attr:外部プロパティ.
  • ZipInfo.header_offset:ファイルヘッダがシフトします.
  • ZipInfo.CRC:圧縮されていないCRC-32.
  • ZipInfo.compress_size:圧縮後のサイズを取得します.
  • ZipInfo.file_size:圧縮されていないファイルサイズを取得します.

  • 次の簡単な例では、これらのプロパティの意味を説明します.
    
    import zipfile, os
    zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))
    zipInfo = zipFile.getinfo('doc.doc')
    print 'filename:', zipInfo.filename
    print 'date_time:', zipInfo.date_time
    print 'compress_type:', zipInfo.compress_type
    print 'comment:', zipInfo.comment
    print 'extra:', zipInfo.extra
    print 'create_system:', zipInfo.create_system
    print 'create_version:', zipInfo.create_version
    print 'extract_version:', zipInfo.extract_version
    print 'extract_version:', zipInfo.reserved
    print 'flag_bits:', zipInfo.flag_bits
    print 'volume:', zipInfo.volume
    print 'internal_attr:', zipInfo.internal_attr
    print 'external_attr:', zipInfo.external_attr
    print 'header_offset:', zipInfo.header_offset
    print 'CRC:', zipInfo.CRC
    print 'compress_size:', zipInfo.compress_size
    print 'file_size:', zipInfo.file_size
    zipFile.close()
    

    zipfileモジュールを使ってzipファイルを処理するのは本当に簡単だと思います.当初はNETプラットフォームの下で、sharpziplibを使って1つのファイルを圧縮して、解凍して、私はN多時間を使って、N多英語の資源を探して、やっと1つのファイルを圧縮するdemoを書きます.現在Pythonを使用してpythonマニュアルを読むことでzipfileモジュールの基本的な使用を1、2時間で把握しています.ははは、Pythonを使って、本当に爽やかです!