見出し画像

【python】メモリ上に一時ファイルを作る

またそういうニッチなことする。

やりたいこと

JSONを受け取ってCSVに変換してFTPアップロードしたい

前回

の続きです。前回はJSONをCSV形式のテキストに変換しました。今回はそれをメモリ上の一時ファイルにします。

一時ファイルを作る

import io
from domain.CsvFromJson import CsvString
class CsvStream():
   def __init__(self, csv_string:CsvString) -> None:
       self.csv_string = csv_string
       self.csv_binary = self.__encode_csv(csv_string)
       self.temp_csv = self.__create_temp_csv(self.csv_binary)
       
   def get_temp_csv(self):
       return self.temp_csv
       
   def __create_temp_csv(self, csv_binary):
       temp_file_object = io.BytesIO(csv_binary)
       return temp_file_object
       
   def __encode_csv(self, csv_string):
       string = csv_string.get_csv_string()
       csv_binary = string.encode("utf-8")
       return csv_binary


if __name__ == '__main__':
   csv = CsvStream('"hoge","huga"\n"name","0"')
   print(csv.get_temp_csv())

肝になるのは

temp_file_object = io.BytesIO(csv_binary)

と、BytesIOに喰わせる為のバイトライクオブジェクトを作る

csv_binary = string.encode("utf-8")

の二行です。

前回つくったStringを、utf-8でエンコードしてからio.BytesIOに渡すことで、メモリ上に一時ファイルを作ることが出来ます。

こうしておくと、このtemp_file_objectをそのままFTPでアップロード出来ますが、当然メモリ上に作ることになるので、「真っ当に作ると120MBくらいになりますけど」みたいなファイルを作る場合、使用可能なメモリのサイズに注意が必要です。

次回はFTPでアップロードします。

この記事が気に入ったらサポートをしてみませんか?