pythonでZipFileを使ってzip圧縮したらディレクトリ構造まで付いてきたので、ファイルだけにしたい
元々カレントの場所に出力するプログラムを作っていたのですが、
zip圧縮するなら元のファイルは消さないとなー、
くらいに思っていたのですが、
TemporaryDirectoryという素晴らしいものがありまして。
これを使うと一時的に使えるディレクトリが作成できます。
使い終わったら消えます。便利。
んで本題。
出力pathを指定したところ、zip圧縮した中身のファイルもディレクトリ構造をそのまま持ってきちゃいまして。
例)
{TemporaryDirectory}/outfile_{today_str}.csv
をzipにそのまま放り込んだら、「{TemporaryDirectory}/」がそのまま付いてきた。
これを解消する方法を調べたら、
arcnameで入れるファイル名の階層を指定できるので、ファイル名だけをそのまま指定すれば、
zipファイルの中に直接ファイルを入れられる、ということが分かりました。
with TemporaryDirectory() as tempdir:
out_file_name = f'outfile_{today_str}.csv'
out_file_name_zip = f'outfile_{today_str}.zip'
to_csv(df, Path(tempdir) / out_file_name) -- dfをファイルに出力する部分
with ZipFile(out_file_name_zip, 'w') as out_zip:
out_zip.write(Path(tempdir) / out_file_name, arcname=out_file_name)
逆にarcnameにディレクトリ構造を指定することもできるので、
込み入ったディレクトリ構造をzipに入れるタイミングで制御することもできます(あんまり要望無さそう)
コメント