Pythonのtarfileモジュールの使い方|tarファイルの作成、ファイルの追加、取得のやり方を解説

スポンサーリンク

この記事では、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

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()

上記のコードの出力は以下の通りです。

Folder Before Tar Creation
Folder Before Tar Creation

6. tarfile モジュールを使って tarball から全てのファイルを取り出すには?

単一のファイルではなく、tarファイル全体を取り出すには、 tarfile モジュールの extractall() メソッドを使用します。

以下の画像は、tarファイルの中身を取り出す前のフォルダのスナップです。

Folder After Creating Tar
Folder After Creating Tar

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

Folder Before Extracting From Tar
Folder Before Extracting From Tar

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

Folder After Extracting From Tar
Folder After Extracting From Tar

まとめ

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

タイトルとURLをコピーしました