この記事では、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 moduleimport tarfile
#declare filenamefilename= "tutorial.tar"
#open file in write modefile_obj= tarfile.open(filename,"w")
#Add other files to tar filefile_obj.add("plane.xml")
file_obj.add("sample.txt")
file_obj.add("person.ini")
#close filefile_obj.close() |
次のコードは、Pythonでtarファイルを作成するための実装です。
ここでは、tarファイルの作成に open() メソッドを使用し、tarファイルに他のファイルを追加するために add() メソッドを使用しています。
#import moduleimport tarfile
#declare filenamefilename= "tutorial.tar"
#Check for the file being tarfile#this will give trueflag=tarfile.is_tarfile(filename)
print("tutorial.tar is a tar file?")
print(flag)
#this will give falseflag=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?
Trueplane.xml is a tar file?
False |
2. 2. ファイルがtarfileであるかどうかを調べるには?
ファイルが .tar 拡張子で終わっているかどうかは、 tarfile モジュールの is_tarfile() メソッドを使うだけで確認することができます。
以下のコードは、その実装を表しています。
#import moduleimport tarfile
#declare filenamefilename= "tutorial.tar"
#open file in write modefile_obj= tarfile.open(filename,"r")
# get the names of files in tar filenamelist=file_obj.getnames()
#print the filenamesprint("files in the tar file are:")
for name in namelist:
print(name)
#close filefile_obj.close() |
上記のコードの出力は以下の通りです。
files in the tar file are:
plane.xmlsample.txtperson.ini |
この記事もチェック:Pythonのstatisticsモジュールで便利なメソッドを7つ紹介する
3. tarfileモジュールを使ってtarファイルの中身を確認するには?
tar ファイルを展開せずにその中身をチェックするには、 tarfile モジュールの getnames() メソッドを使います。
getnames()` メソッドは tar ファイルに含まれるファイル名のリストを返します。
ここでは、ファイルを “read “モードでオープンしているので、open()メソッドの第2引数に “r “が与えられています。
#import moduleimport tarfile
#declare filenamefilename= "tutorial.tar"
#open file in append modefile_obj= tarfile.open(filename,"a")
# print initial content of tarfilenamelist=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 tarfilenamelist=file_obj.getnames()
print("Final files in the tar file are:")
for name in namelist:
print(name)
#close filefile_obj.close() |
上記のコードの出力は次のとおりです。
Initial files in the tar file are:
plane.xmlsample.txtperson.iniFinal files in the tar file are:
plane.xmlsample.txtperson.inisampleoutput.txt |
4. 新しいファイルを tar ファイルに直接追加するには?
tar ファイルを作成するときに行ったように、tarfile モジュールの add() メソッドを使用して、tar ファイルに直接新しいファイルを追加することができます。
唯一の違いは、ファイルを追加モードで開く必要があることです。
そのため、open() メソッドの第2引数に “a” が渡されます。
#import moduleimport tarfile
#declare filenamefilename= "tutorial.tar"
#open file in write modefile_obj= tarfile.open(filename,"r")
#extract a filefile=file_obj.extractfile("sample.txt")
print("Content of the extracted file are")
#print content of extracted fileprint(file.read())
#close filefile_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 moduleimport tarfile
#declare filenamefilename = "tutorial.tar"
#open file in write modefile_obj = tarfile.open(filename,"r")
#extract all filesfile = file_obj.extractall("extracted_tar_folder")
#close filefile_obj.close() |
上記のコードの出力は以下の通りです。

6. tarfile モジュールを使って tarball から全てのファイルを取り出すには?
単一のファイルではなく、tarファイル全体を取り出すには、 tarfile モジュールの extractall() メソッドを使用します。
以下の画像は、tarファイルの中身を取り出す前のフォルダのスナップです。

extractall()`メソッドは出力フォルダの名前を引数にとり、tarファイルの内容全体を作業ディレクトリのフォルダに展開します。

以下の画像は、tarファイルからフォルダを抽出した後の作業ディレクトリのスナップショットです。

まとめ
この記事では、tar ファイルとは何か、そして python の tarfile モジュールを使って tar ファイルを作成、アクセス、操作する方法について見てきました。