この記事では、tarファイルとは何かを理解し、プログラミング言語pythonの tarfile
モジュールを使ってtarファイルを作成し、操作してみることにします。
この記事では、以下の方法を説明します。
- tarfile モジュールを使って tar ファイルを作成します。
- tarファイルへのファイルの追加と追記
- tarファイル内のファイル一覧の取得
- tarファイルからファイルを取り出す
tarファイルとは?
tarファイルのtarは、Tape Archive Filesの略です。
tarファイルは、多くのファイルを1つのファイルにまとめて保存するためのアーカイブファイルです。
tarファイルは、オープンソースソフトウェアの配布に利用されています。
一般に tar ファイルの拡張子は .tar
ですが、gzip などの他のユーティリティで圧縮された場合は tar.gz
という拡張子になります。
Python で tarfile モジュールを操作する
それではさっそくtarfileモジュールを使ってみましょう。
もしあなたがPythonでzipファイルを扱うことに興味があるなら、ここのzipfileモジュールのチュートリアルは完璧でしょう。
1. tarfile モジュールを使って tar ファイルを作成するには?
Python では、tarfile
モジュールを使って tar ファイルを作成することができます。
ファイルを書き込みモードで開き、他のファイルを追加してtarファイルを作成します。
次のスクリーンショットは、zipファイルを作成する前のフォルダ内のファイルを示しています。
#import module import tarfile
#declare filename filename = "tutorial.tar"
#open file in write mode file_obj = tarfile. open (filename, "w" )
#Add other files to tar file file_obj.add( "plane.xml" )
file_obj.add( "sample.txt" )
file_obj.add( "person.ini" )
#close file file_obj.close() |
次のコードは、Pythonでtarファイルを作成するための実装です。
ここでは、tarファイルの作成に open()
メソッドを使用し、tarファイルに他のファイルを追加するために add()
メソッドを使用しています。
#import module import tarfile
#declare filename filename = "tutorial.tar"
#Check for the file being tarfile #this will give true flag = tarfile.is_tarfile(filename)
print ( "tutorial.tar is a tar file?" )
print (flag)
#this will give false flag = tarfile.is_tarfile( "plane.xml" )
print ( "plane.xml is a tar file?" )
print (flag)
|
ここで、open()
メソッドは、第一引数に作成するtarファイルのファイル名を取り、書き込みモードでファイルを開くために “w” を受け取ります。
add()
メソッドは、tarファイルに追加するファイルのファイル名を引数にとります。
以下の画像は、上記のコードを実行したときに作成されるtarファイルです。
tutorial.tar is a tar file ?
True plane.xml is a tar file ?
False |
2. 2. ファイルがtarfileであるかどうかを調べるには?
ファイルが .tar 拡張子で終わっているかどうかは、 tarfile
モジュールの is_tarfile()
メソッドを使うだけで確認することができます。
以下のコードは、その実装を表しています。
#import module import tarfile
#declare filename filename = "tutorial.tar"
#open file in write mode file_obj = tarfile. open (filename, "r" )
# get the names of files in tar file namelist = file_obj.getnames()
#print the filenames print ( "files in the tar file are:" )
for name in namelist:
print (name)
#close file file_obj.close() |
上記のコードの出力は以下の通りです。
files in the tar file are:
plane.xml sample.txt person.ini |
この記事もチェック:Pythonのstatisticsモジュールで便利なメソッドを7つ紹介する
3. tarfileモジュールを使ってtarファイルの中身を確認するには?
tar ファイルを展開せずにその中身をチェックするには、 tarfile
モジュールの getnames()
メソッドを使います。
getnames()` メソッドは tar ファイルに含まれるファイル名のリストを返します。
ここでは、ファイルを “read “モードでオープンしているので、open()
メソッドの第2引数に “r “が与えられています。
#import module import tarfile
#declare filename filename = "tutorial.tar"
#open file in append mode file_obj = tarfile. open (filename, "a" )
# print initial content of tarfile namelist = file_obj.getnames()
print ( "Initial files in the tar file are:" )
for name in namelist:
print (name)
file_obj.add( "sampleoutput.txt" )
# print final content of tarfile namelist = file_obj.getnames()
print ( "Final files in the tar file are:" )
for name in namelist:
print (name)
#close file file_obj.close() |
上記のコードの出力は次のとおりです。
Initial files in the tar file are:
plane.xml sample.txt person.ini Final files in the tar file are:
plane.xml sample.txt person.ini sampleoutput.txt |
4. 新しいファイルを tar ファイルに直接追加するには?
tar ファイルを作成するときに行ったように、tarfile
モジュールの add()
メソッドを使用して、tar ファイルに直接新しいファイルを追加することができます。
唯一の違いは、ファイルを追加モードで開く必要があることです。
そのため、open()
メソッドの第2引数に “a” が渡されます。
#import module import tarfile
#declare filename filename = "tutorial.tar"
#open file in write mode file_obj = tarfile. open (filename, "r" )
#extract a file file = file_obj.extractfile( "sample.txt" )
print ( "Content of the extracted file are" )
#print content of extracted file print ( file .read())
#close file file_obj.close() |
上記のコードの出力は次のとおりです。
Content of the extracted file are
b 'This is a sample file for tarfile tutorial in python on askpython.com'
|
5. Python で tar ファイルから単一のファイルを取り出すには?
zip フォルダから単一のファイルだけを取り出すには、 tarfile
モジュールの extractfile()
メソッドを使用します。
このメソッドは引数としてファイル名を受け取り、作業ディレクトリにあるファイルを取り出します。
#import module import tarfile
#declare filename filename = "tutorial.tar"
#open file in write mode file_obj = tarfile. open (filename, "r" )
#extract all files file = file_obj.extractall( "extracted_tar_folder" )
#close file file_obj.close() |
上記のコードの出力は以下の通りです。
6. tarfile モジュールを使って tarball から全てのファイルを取り出すには?
単一のファイルではなく、tarファイル全体を取り出すには、 tarfile
モジュールの extractall()
メソッドを使用します。
以下の画像は、tarファイルの中身を取り出す前のフォルダのスナップです。
extractall()`メソッドは出力フォルダの名前を引数にとり、tarファイルの内容全体を作業ディレクトリのフォルダに展開します。
以下の画像は、tarファイルからフォルダを抽出した後の作業ディレクトリのスナップショットです。
まとめ
この記事では、tar ファイルとは何か、そして python の tarfile
モジュールを使って tar ファイルを作成、アクセス、操作する方法について見てきました。