質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1454閲覧

pythonでファイル内に複数ある.tar.gzファイルを解凍したい

maltines

総合スコア12

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/07/28 03:52

編集2022/07/28 04:24

前提

python初心者です。現在pythonでフォルダ内の.tar.gzファイルを全て解凍するコードをネットを頼りに作成しました。こちらでjbpb0さんから助言を頂きコードを実行したところ、エラーは出ていないのですが、フォルダの中の1つのファイルしか解凍されないという事になっています。

実現したいこと

ファイル内の.tar.gzファイルを全て解凍する

発生している問題・エラーメッセージ

エラーは出てきません。
フォルダの中には、
JPWRP_20220406.tar.gz
というような2022XXXXの日付の部分が異なるファイルが複数あります。
素人考えなのですが、フォルダ内の各tar.gzファイルを解凍すると、いくつかのtsvファイルが出てくるのですが、異なる日付のファイルでも、解凍すると同じ名前のtsvファイルが出力されます。このため一つのファイルしか出力されないのではないかと思います。
解決するためには異なるファイルに出力しなおす必要がありますでしょうか。そのためにはどうすればいいでしょうか。

該当のソースコード

python

1import os 2import tarfile 3import glob 4os.chdir(r"C:\case study\applying date check") 5tar_gz_files = glob.glob('*.tar.gz') 6 7for file in tar_gz_files: 8 with tarfile.open(file) as tar: 9 tar.extractall(r'C:\\case study') 10

試したこと

数度実行し試したのですが一つしか出力されません。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2022/07/28 03:58

tar.gzファイルをonedriveじゃないところに置いて、解凍先の場所もonedrive以外の場所を指定しても、ダメでしょうか?
maltines

2022/07/28 04:12

出力は出来ました。ご回答誠にありがとうございます。しかし、ファイルの一部のみ解凍されるという別の問題が発生したため、質問を変更させていただきます。
jbpb0

2022/07/28 04:19 編集

質問内容とは関係無いかもしれませんが、Windowsでのパスは、 "C:\\Users とするよりも、 r"C:\Users と「r」を付ける方が、いちいち「\\」と書き換える必要が無く、楽ですよ 参考 https://note.nkmk.me/python-raw-string-escape/ の「raw文字列でエスケープシーケンスを無視(無効化)」の「Windowsのパス」
maltines

2022/07/28 04:24

ご助言ありがとございます。
otn

2022/07/28 04:38

「pythonでファイル内に複数ある.tar.gzファイルを解凍したい」 は、 「pythonでフォルダー内に複数ある.tar.gzファイルを解凍したい」 の誤記という理解で合ってますか?
guest

回答1

0

ベストアンサー

すべてのtarファイルの内容が同じ構成・同じファイル名なら、すべて解凍されても、毎回上書きになるので、最後の中身しか残ってないことになります。
どうしたいかによりますが、tar.extractall(r'C:\case study')の解凍先ディレクトリ名をtarファイル毎に変えることになるかと思います。ディレクトリ名を連番にしても良いし、tarファイル名の一部を取っても良いし。そのあたりは単なる文字列処理なので、したいようにすれば良いかと思います。

投稿2022/07/28 04:48

otn

総合スコア86295

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maltines

2022/07/28 07:54

ありがとうございます。誠に稚拙な質問ですが、解凍先ディレクトリ名を基のtarファイルと同じ名前にしたいのですが、初心者ですのでどのような構文が適切なのかわかりませんのでもしよろしければ教えていただけないでしょうか。最後にos.rename()で書き換えようとも考えたのですが、最後に作成できるディレクトリの名前が分からず適切なコードを作れませんでした。
maltines

2022/07/28 08:03

すみません、解決しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問