サイトアイコン teckback

DjangoでCSVファイルを読み込む方法:InMemoryUploadedFileオブジェクトの使い方

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))

まとめたら、こんな感じだけど、結構時間かかったのでメモ。また同じような事することも有るかと思うので。。

著:大橋亮太, 著:古田薫
¥2,317 (2024/03/23 18:20時点 | Amazon調べ)
モバイルバージョンを終了