Djangoでformからcsvファイルを受け取り、それをdfに変換したい。 お力をお貸しください。。。
解決したいこと
Djangoでformからcsvファイルを受け取り、複数のcsvパターンに対応して
それをdfに変換したい。
発生している問題・エラー
Djangoにて、formからrequestでcsvファイルを受け取り、
それをdfに変換して別のpythonファイルに渡そうとしています。
まずdfに変換できないcsvファイルが入ってきて
行き着いた指定がこれです。これでdfに変更することができました。
df = pd.read_csv(io.StringIO(file.read().decode('CP932')), delimiter=',')
ですが、別のファイルを入れるとエラーがでます。
その他のファイルはencodeやdecodeを指定しなくても以下で読み取ってくれます。
df = pd.read_csv(file)
どちらが来ても良いように以下のコードで試してみました。
同じ記述で対応してるcsvファイルなら一つずつで通るので
一つ目失敗しても二つ目で対応している記載で待ち構えておけば、と考え
try exceptで二段構えでdfに変換を試しましたが、
二段にすると二段目でもエラーになってしまいます。
つまり、ファイルが何らかの形に変わってるのだと思いました。
どなたか、お知恵をお貸しいただけませんでしょうか。
何卒よろしくお願いします。
例)
一段目
first error 'cp932' codec can't decode byte 0xef in position
二段目
second error No columns to parse from file
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
該当するソースコード
views.py
if request.method == 'POST' and request.FILES['csvfile']:
form = UploadFileForm(request.POST, request.FILES)
file = request.FILES['csvfile']
myfile = request.FILES['csvfile']
try:
df = pd.read_csv(io.StringIO(file.read().decode('CP932')), delimiter=',')
except Exception as e:
print(f"first error{e}")
try:
df = pd.read_csv(myfile)
except Exception as e:
print(f"second error {e}")
checkfunc(df)
自分で試したこと。。
### 自分で試したこと
dfに入れるfile名を変えてそれぞれに違う変数として渡した。
utf-8やcp932などencode指定を変えた。
engine='python'などの引数を入れた。
filesystemstorageに格納してみた。
これもエラー続出し
結果呼び出し方、pd.read_csvの入れ方がわからなくて進まず質問させて頂きました。。。。
form = UploadFileForm(request.POST, request.FILES)
myfile = request.FILES['csvfile']
fs = FileSystemStorage()
filename = fs.save(myfie.name, myfile)
uploaded_file_url = fs.url(filename)
0