非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Python】ZIPファイルを解凍せずに一部のファイルを別の場所に保存する方法

   

圧縮ファイルの中のファイルを抜き出すためには一旦解凍する必要あるのですが、それだとファイルが複数あったりすると面倒なので解凍せずに目的のファイルだけ抜き出す方法を少尉介します。

今回の例では以前紹介したHistData.comから取得した為替レートの1分足データ(各年ごとのzip)を使います。2014〜2022年の9つのzipファイルとなっていて中身はcsvファイルとtxtファイルの2つで構成されています。今回はこのcsvファイルだけ抜き出し別のフォルダに保存します。

 

ソースコードはこちらです。テキストファイルなのでバイナリデータからテキストに起こして保存し直しています。バイナリから直接保存する方法があれば画像ファイルも行けると思います。

import zipfile

fnames = ['DAT_ASCII_USDJPY_M1_2014.zip',
          'DAT_ASCII_USDJPY_M1_2015.zip',
          'DAT_ASCII_USDJPY_M1_2016.zip',
          'DAT_ASCII_USDJPY_M1_2017.zip',
          'DAT_ASCII_USDJPY_M1_2018.zip',
          'DAT_ASCII_USDJPY_M1_2019.zip',
          'DAT_ASCII_USDJPY_M1_2020.zip',
          'DAT_ASCII_USDJPY_M1_2021.zip',
          'DAT_ASCII_USDJPY_M1_2022.zip']

for fname in fnames:
  zip = zipfile.ZipFile(fname, 'r')
    # ファイルリスト取得
  list = zip.infolist()
  for file in list:
    #csvファイルがあったら
    if file.filename.endswith('.csv'):
      print(file.filename)
      fp = zip.open(file.filename, 'r')
      text = fp.read().decode('UTF-8')
      f = open('csv/'+file.filename, 'w')
      f.write(text)
      f.close()
 

 

 

結果はご覧の通りcsvファイルだけ抜き出すことができました。

 

スポンサーリンク

 - Python