【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でアップロードします。
この記事が気に入ったらサポートをしてみませんか?