前提・実現したいこと
pythonを使って2重に圧縮されたtgz(tar.gz)ファイルの中身を取り出そうとしています。
その際、ファイルは解凍することなく読み込みます。
aaa.tgz
┗aaaフォルダ
---┣a.txt
---┣b.txt
---┗ccc.tgz
------┗cccフォルダ
---------┣c.txt
---------┗d.txt ・・・読みたいファイル
zipの場合、ZipFileオブジェクトを使えば開けました。
ただ今回のTarFileオブジェクトでは、エラーが発生します。
質問の目的は、以下の2点となります。
・TarFileオブジェクトは、2重に圧縮された状態でファイルを見ることができるか?
・もし見れる場合は、どのような手法を使えば良いのか?
【参考】もし対象のファイルがzipファイルだった場合
zipファイルとZipFileオブジェクトの組み合わせは、エラーは発生しない
python3
1with zipfile.ZipFile("aaa.zip")as f: 2 with f.open("aaa/ccc.zip") as ff: 3 with zipfile.ZipFile(ff).open("d.txt") as fff: 4 result = fff.read()
発生している問題・エラーメッセージ
ZipFileと同じ形式でプログラムしたが、エラーが発生した。
python3
1with tarfile.TarFile("aaa.tgz")as t: ・・・エラー発生 2 with t.open("aaa/ccc.tgz") as tt: 3 with tarfile.TarFile(tt).open("d.txt") as ttt: 4 result = ttt.read()
ReadError: truncated header
試したこと
openコマンドでできないか試行錯誤(その1)
python3
1with tarfile.open("aaa.tgz")as t: 2 with t.open("aaa/ccc.tgz")as tt: ・・・エラー発生 3 with tt.open("ccc/d.txt")as ttt: 4 result = fff.read()
FileNotFoundError: [Errno 2] No such file or directory: 'aaa/ccc.tgz'
openコマンドでできないか試行錯誤(その2)
python3
1with tarfile.open("aaa.tgz")as t: 2 with tarfile.open(fileobj=t.getmembers()[3])as tt: ・・・エラー発生 3 with tt.open("ccc/d.txt")as ttt: 4 result = fff.read()
AttributeError: 'TarInfo' object has no attribute 'tell'
補足情報(FW/ツールのバージョンなど)
Python 3.9.2
Windows 10 + Jupyter notebook
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/13 03:17