問題タブ [tarfile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
3950 参照

python - Pythonを使用してベース名のみのtarfileからファイルを抽出する

完全なパス「/home/usr/path/to/file」を持つファイルを含む「tafile」があります。ファイルを現在のフォルダーに抽出すると、完全なパスが再帰的に作成されます。ベース名のみでファイルを抽出する方法はありますか。

0 投票する
2 に答える
7271 参照

python - Pythonのtarfileを使用するときに、既存の読み取り専用ファイルを上書きする

Pythonのtarfileモジュールを使用してtar.gzアーカイブを抽出しようとしています。

抽出によって、すでに存在するターゲットファイルを上書きしたいのですが、これはtarfileの通常の動作です。

ただし、一部のファイルで書き込み保護がオンになっているという点で問題が発生しています(chmod 550など)。

操作はtarfile.extractall()実際には失敗します:

通常のコマンドラインからファイルを削除しようとすると、それを実行できます。プロンプトに応答するだけです。

通常のGNUtarユーティリティも、これらのファイルを簡単に処理します。抽出すると、ファイルが上書きされるだけです。

私のユーザーはファイルの所有者であるため、tarfile.extractallを実行する前にターゲットファイルを再帰的にchmodすることは難しくありません。または、shutil.rmtreeを使用して、事前にターゲットを吹き飛ばすことができます。これは、現在使用している回避策です。ただし、これは少しハックな感じがします。

tarfile内の読み取り専用ファイルの上書き、例外の使用などを処理する、よりPython的な方法はありますか?

0 投票する
2 に答える
2123 参照

python - tarfileとユーザー、グループ情報の問題

私はPythontarfileモジュールを使用して、*。tgzファイルからファイルを抽出しています。ここで私が使用するもの:

「some.tar」の内容を次のように想定します。

しかし、抽出した後、ユーザー、グループ、日付...の情報がすべて失われます。それらは現在、スクリプトを呼び出す人(私の場合はroot)に属しています。彼らは次のようになります:

ファイルの所有者、ファイルの日付情報を保持する方法はありますか?

tarfileモジュールページから:

-handles directories, regular files, hardlinks, symbolic links, fifos, character devices and block devices and is able to acquire and restore file information like timestamp, access permissions and owner.

この声明から、「tarfile」モジュールでこれを行うことは非常に可能であると理解していますか、それとも間違っていると思いますか?

Pythonのバージョンは2.6.1です

編集:私はこのスクリプトをrootとして実行しています

ありがとう

0 投票する
1 に答える
705 参照

python - bz2データを使用したPythonTarFile

bz2圧縮されたtarfileをダウンロードして、tarfile.TarFileそこからオブジェクトを作成しようとしています。

ドキュメント(http://docs.python.org/library/tarfile.html#tarfile.open)によると、使用するfileobj=場合はファイルを優先して使用されますname=。しかし、それはまだnullファイルにアクセスしようとしているように見えますか?

fileobjが指定されている場合、名前のために開かれたファイルオブジェクトの代わりに使用されます。位置0にあるはずです。

使用せずtarfile.open()、bz2データを解凍してtarfile.Tarfileオブジェクトを手動で作成すると、次のように機能しStringIOますfileobj

tarfilebz2圧縮をサポートすることになっているので、私は合理化しようとしていました。

0 投票する
4 に答える
2321 参照

python - ディレクトリ内でファイルが追加、削除、または変更されたかどうかを判断する

ディレクトリ内のすべてのファイルの md5sum を取得する Python スクリプトを作成しようとしています (Linux)。以下のコードで行ったと思います。

これを実行して、ディレクトリ内のファイルが変更されておらず、削除するファイルが追加されていないことを確認したいと考えています。

問題は、ディレクトリ内のファイルに変更を加えた後、元に戻す場合です。以下の関数を実行すると、別の結果が得られます。(変更したファイルを元に戻しましたが。

誰でもこれを説明できますか。また、回避策を考えられるかどうか教えてください。

編集: これらの素晴らしい人々が答えたように、tarには変更日などのヘッダー情報が含まれているようです。zip を使用すると、別の形式または別の形式で動作しますか?

回避策の他のアイデアはありますか?

0 投票する
1 に答える
2932 参照

python - Python: 抽出中に tar ファイル内のメンバーの名前を変更する

前提

  • 私はディレクトリを持っています/foo/bar
  • ディレクトリを含むtarファイルがありますbaz

問題

bazアーカイブ内の内容を抽出する/foo/bar

アーカイブには次が含まれます。

ソース ディレクトリには以下が含まれます。

抽出後、次のようになりたい:

これまでのソリューション

一時ディレクトリに抽出し、その内容をbazターゲットの場所に移動しbazます。ディレクトリは常に同じ名前になるため、これは機能します。

他のアイデアはありますか?

0 投票する
1 に答える
4440 参照

python - Pythonマルチプロセッシングプールでtarfileを処理するにはどうすればよいですか?

を使用してtarfileの内容を処理しようとしていますmultiprocessing.Pool。マルチプロセッシングモジュール内でThreadPool実装を正常に使用できますが、スレッドの代わりにプロセスを使用できるようにしたいと考えています。これは、より高速で、Matplotlibがマルチスレッド環境を処理するために行った変更を排除できるためです。アドレス空間を共有していないプロセスに関連していると思われるエラーが発生しましたが、修正方法がわかりません。

実際のプログラムはもっと複雑ですが、これはエラーを再現する私が行っていることの例です。

TarInfoオブジェクトが他のプロセスに渡されたときに何かが間違っているのではないかと思いますが、親TarFileはそうではありませんが、マルチプロセスの場合にそれを修正する方法がわかりません。tarballからファイルを抽出してディスクに書き込むことなくこれを行うことはできますか?

0 投票する
1 に答える
1878 参照

python - Python で破損した tar.bz2 ファイルから読み取るにはどうすればよいですか?

動作中に出力を tar.bz2 ファイルに保存するプログラムがあります。そのデータを処理する python スクリプトがあります。

最初のプログラムが中断された場合、またはプロセスの進行中に python スクリプトを実行するだけで、出力を処理できるようにしたいと考えています。

もちろん、最後の bzip2 ブロックは未完成であるため、読み取ることはできません。実際には破損していますが、実際には切り詰められているだけです。GNU tar は実際には、その時点までのファイルから可能な限りすべてを喜んで抽出しますbzcatbzip2recover修復されたブロックを作成することもできますが、この場合はbzcat.

しかし、私は Python の標準のtarfileモジュールを使用しようとしています。これは失敗します

最初にあることがわかってTarFile.extractfileいるファイルで使用しようとしたとき。(問題なく抽出されます。)tar -xf tarfile.tar.bz2 filename

ファイルの無効な終わりを無視して、私が持っているものを操作するために私ができる賢いことはありますか?

データセットはかなり大きくなる可能性があり、非常に圧縮可能であるため、圧縮しないままにしておくことは望ましくありません。

(既存の質問Untar archive in Python with errorsを見つけましたが、その場合、ユーザーはos.systemtar ファイルを試みています。)

0 投票する
1 に答える
2429 参照

python - Python tar ファイルのサイズ

この方法で、tarfile 内のファイルのサイズを計算できます。

ただし、返される合計サイズは、tarfile 内の要素の合計であり、圧縮されたファイルのサイズではありません (少なくともこれは、これを試してみて確信したことです)。os.path.getsize などで確認せずに、tar ファイル全体の圧縮サイズを取得する方法はありますか?

0 投票する
4 に答える
18792 参照

python - Python を使用して zip または tar を安全に抽出する

ユーザーが送信した zip および tar ファイルをディレクトリに抽出しようとしています。zipfile のextractallメソッドのドキュメント (tarfile の extractall と同様)には、パスが絶対..パスであるか、宛先パスの外にあるパスを含む可能性があると記載されています。代わりに、次extractのように自分自身を使用できます。

これは安全ですか?some_pathこの場合、アーカイブ内のファイルが外部に巻き上げられる可能性はありますか? もしそうなら、ファイルが宛先ディレクトリの外に出ないようにするにはどうすればよいですか?