【ハマり解決】PythonのflaskにおいてアップロードされたCSVファイルをpandasに展開する方法

  • 2019年11月14日
  • 2019年11月15日
  • Python
  • 37view

 

この記事でわかること

・Pythonのflaskのノウハウが分かる

・アップロードされたCVSファイルをpandasに展開する方法がわかる

 

 

メイドさん

この記事を探した人は、納期間近?
または、プログラミングでドハマリしていることでしょう!
まずは、一息つきましょう。その方が、意外に良い解決策が見つかるものですよ♪

 

 

起きた問題

WEBサイト(flaskで作成)でアップロードされたファイルデータ(一時ファイル)を読み取って、

pandasに展開しようとしたらエラー(エラーの内容忘れた ^^;)が発生した。

 

そのときに書いたコードが以下の通り。

from flask import Flask, render_template, request
import pandas as pd
#Flaskオブジェクトの生成
app = Flask(__name__)


#ファイルのアップデートを読み込む
file = request.files['campaign_file']

#読み込んだデータを読み込み(ファイル形式はcsv)
uni_string = file.stream.read()     

#pandasに展開しようとしたがここでエラーが起きて停止した
df = pd.read_csv(uni_string, encoding='utf8')
                    

 

 

解決策

 

原因は、よくわかっていないが、

それを以下のように修正したら解決しました。

 

from flask import Flask, render_template, request
import pandas as pd
import io, pkgutil

#Flaskオブジェクトの生成
app = Flask(__name__)


#ファイルのアップロードを読み込む
file = request.files['campaign_file']

#読み込んだデータを読み込み(ファイル形式はcsv)
uni_string = file.stream.read()     

#この部分を修正
#BytesIO はインメモリーのバイナリストリーム
#この結果、CSVデータを正しく展開することができました
df = pd.read_csv(io.BytesIO(uni_string), encoding='utf8')

 

 

上記の結果から、アップロードされたCVSファイルを正しく読み込むには、以下の何れかの対応が必要になります。

 

・一時ファイルを、ファイルに保存してから、再び読み込む(効率悪い)

・先程のコードのようにBytesIOを使って読み込む。

 

以上、解決策でした。

めでたしめでたし

 

 

最新情報をチェックしよう!
>プログラミングスクール検索・比較表サイト

プログラミングスクール検索・比較表サイト

ワンクリック、さらに詳細に条件を指定してプログラミングスクールの検索ができます。さらに比較表により特徴を細かく比較できる!

CTR IMG