DjangoでInMemoryUploadedFileオブジェクトで来たCSVファイルを読み込む方法。
Djangoを使用してWebアプリを開発している場合、ファイルのアップロードや処理は頻繁に行う作業の一つです。CSVファイルを読み込む際には、InMemoryUploadedFileオブジェクトを使用することができます。InMemoryUploadedFileオブジェクトは、アップロードされたファイルをメモリ上に一時的に保存するためのもので、CSVファイルを扱う際には、CSVライブラリを使用してデータを処理することができます。
ソース
まずはロジックを
csv_file = request.FILES.get("file") # 行でループ for line in csv_file: line_count+= 1 if line_count == 1: continue try: line_list = str(line.decode()).split(",") except UnicodeDecodeError: line_list = str(line.decode('cp932')).split(",") # 列でループ for columun in line_list: print(str(columun))
解説
リクエストからファイルを読み込み
csv_file = request.FILES.get("file")
読み込んだCSVファイルを行でループ。
一行目はタイトル行の場合を想定して、初回ループの際はスキップしています。
# 行でループ
for line in csv_file:
line_count+= 1
if line_count == 1:
continue
テキストとして読めるように、デコード&カンマ区切りを配列に格納
文字コードでエラーになった場合は、’cp932’でデコードします。
try: line_list = str(line.decode()).split(",") except UnicodeDecodeError: line_list = str(line.decode('cp932')).split(",")
更に列でループ
今度はデコード済みなので、そのままprintできます。
# 列でループ
for columun in line_list:
print(str(columun))
まとめたら、こんな感じだけど、結構時間かかったのでメモ。また同じような事することも有るかと思うので。。