PythonでZIPアーカイブを操作する(zipfile)
ZIPは、アーカイブと圧縮に使用される最も一般的なファイル形式の1つです。 MSDOSとPCの時代から使用されており、有名なPKZIPアプリケーションで使用されています。
Pythonの標準ライブラリのzipfileモジュールは、ZIPアーカイブの作成、抽出、読み取り、書き込みのためのツールを容易にするクラスを提供します。
ZipFile()
この関数は、組み込みのopen()関数によって作成された文字列またはファイルオブジェクトであるファイルパラメータからZipFileオブジェクトを返します。この関数には、デフォルト値が「r」のモードパラメータが必要ですが、アーカイブを読み取り、書き込み、または追加モードで開くには、それぞれ「w」または「a」の値を取ることができます。
デフォルトでは、アーカイブは非圧縮です。使用する圧縮アルゴリズムのタイプを指定するには、定数の1つを圧縮パラメーターに割り当てる必要があります。
zipfile.ZIP_STORED | 非圧縮アーカイブメンバーの場合。 |
zipfile.ZIP_DEFLATED | 通常のZIP圧縮方法の場合。これにはzlibモジュールが必要です。 |
zipfile.ZIP_BZIP2 | BZIP2圧縮方式の場合。これにはbz2モジュールが必要です。 |
zipfile.ZIP_LZMA | LZMA圧縮方式の場合。これにはlzmaモジュールが必要です。 |
ZipFileオブジェクトは次の方法を使用します。
write()
このメソッドは、ZipFileオブジェクトで表されるアーカイブにファイルを提供しました。
>>> import zipfile >>> newzip=zipfile.ZipFile('newdir/newzip.zip','w') >>> newzip.write('zen.txt') >>> newzip.close()
追加のファイルは、追加モード(モードとして「a」)で開くことにより、既存のアーカイブに追加できます
>>> newzip=zipfile.ZipFile('newdir/newzip.zip','a') >>> newzip.write('zen.txt') >>> newzip.close()
read()
このメソッドは、アーカイブ内の特定のファイルからデータを読み取ります。
>>> newzip=zipfile.ZipFile('newdir/newzip.zip','r') >>> data=newzip.read('json.txt') >>> data b'["Rakesh", {"marks": [50, 60, 70]}]'
printdir()
このメソッドは、指定されたアーカイブ内のすべてのファイルを一覧表示します。
>>> newzip.printdir() File Name Modified Size json.txt 2018-11-2717:04:40 35 zen.txt 2018-11-2523:13:44 878
extract()
このメソッドは、指定されたファイルをアーカイブからデフォルトで現在のディレクトリまたはその2番目のパラメータとして指定されたディレクトリに抽出します。
>>> newzip.extract('json.txt','newdir') 'newdir\\json.txt'
extractall()
このメソッドは、デフォルトでアーカイブ内のすべてのファイルを現在のディレクトリに抽出します。パラメータとして必要に応じて代替ディレクトリを指定します。
>>> newzip.extractall('newdir')
getinfo()
このメソッドは、指定されたファイルに対応するZipInfoオブジェクトを返します。 ZipInfoオブジェクトには、ファイルのさまざまなメタデータ情報が含まれています。
次のコードは、アーカイブから「zen.txt」のZipInfoオブジェクトを取得し、そこからファイル名、サイズ、日時の情報を取得します。
>>> inf = newzip.getinfo('zen.txt') >>> inf.filename,inf.file_size, inf.date_time ('zen.txt', 878, (2018, 11, 25, 23, 13, 45))
infolist()
このメソッドは、アーカイブ内のすべてのファイルのZipInfoオブジェクトのリストを返します。
>>> newzip.infolist() [<ZipInfo filename = 'json.txt' filemode='-rw-rw-rw-' file_size=35>, <ZipInfo filename = 'zen.txt' filemode='-rw-rw-rw-' file_size=878>]
前述のように、ZIPアーカイブの構築中に適用される圧縮アルゴリズムは圧縮パラメーターで指定されます。次のコードでは、ZIP-DEFLATED定数がzlib圧縮を使用してアーカイブを構築します。
>>> zipobj = zipfile.ZipFile('txtzip.zip',mode='w', compression=zipfile.ZIP_DEFLATED) >>> files=glob.glob("*.txt") >>> for file in files: zipobj.write(file) >>> zipobj.close()
namelist()
ZipFileオブジェクトのこのメソッドは、アーカイブ内のすべてのファイルのリストを返します。
>>> zipobj = zipfile.ZipFile('txtzip.zip',mode='r') >>> zipobj.namelist() ['a!.txt', 'data().txt', 'dict.txt', 'json.txt', 'LICENSE.txt', 'lines.txt', 'msg.txt', 'NEWS.txt', 'test.txt/', 'zen.txt', 'zen1.txt', 'zenbak.txt']
setpassword()
このメソッドは、アーカイブの抽出時に提供する必要のあるパスワードパラメータを設定します。
PyZipFile()
zipfileモジュールのこの関数は、PyZipFileオブジェクトを返します。 PyZipFileオブジェクトは、拡張子が.pyのファイルを含むモジュールを構築できます。このアーカイブをsys.path環境変数に追加して、モジュールをzipimportモジュールを使用してインポートできるようにすることができます。
writepy()メソッドは、それぞれの.pycファイルにコンパイルした後、アーカイブに.pyファイルを追加します。
files=glob.glob("*.py") >>> pyzipobj = zipfile.PyZipFile('pyfiles/pyzip.zip', mode='w', compression=zipfile.ZIP_LZMA) >>> for file in files: pyzipobj.writepy(file) >>> pyzipobj.close()
この記事では、zipfileモジュールのクラスと関数について説明しました。
-
Bokeh(Python)で画像を操作する方法は?
Bokehで画像を操作するには、 image_url()を使用します メソッドと画像のリストを渡します。 ステップ :func:show のときにファイルに保存された出力を生成するように、デフォルトの出力状態を構成します と呼ばれます。 プロット用の新しい図を作成します。 指定されたURLから読み込まれた画像をレンダリングします。 Bokehオブジェクトまたはアプリケーションをすぐに表示します。 例 from bokeh.plotting import figure, show, output_file output_file('image.html') p = fi
-
Python-PyGameで画像を表示する
Pygameは、ゲームやマルチメディアアプリケーションを作成するためのPython用のマルチメディアライブラリです。この記事では、pygameモジュールを使用して、pygameウィンドウでの高さ、幅、位置を考慮して、画面に画像をペイントする方法を説明します。 以下のプログラムでは、pygameモジュールを初期化してから、画像のモードとキャプションを定義します。次に、画像をロードして座標を定義します。 screen.blit関数は、whileループがゲームの終了をリッスンし続けている間、画面をペイントします。 例 import pygame pygame.init() w = 300; h =