2017-02-10 25 views
0

私のフラスコアプリケーションにアップロードされたcsvを変更しようとしています。私はフラスコを通してアップロードしないとうまく動作するロジックを持っています。Flaskにアップロードされたファイルを開く

import pandas as pd 
import StringIO 
with open('example.csv') as f: 
    data = f.read() 

data = data.replace(',"', ",'") 
data = data.replace('",', "',") 
df = pd.read_csv(StringIO.StringIO(data), header=None, sep=',', quotechar="'") 
print df.head(10) 

IがI(f)はオープンで( 'example.csv')オープン置き換え、上記のコードを介してそれを実行すると、私は得ることが

f = request.files['data_file'] 

を用いてフラスコにアクセスするためにそれをアップロード次のエラー

coercing to Unicode: need string or buffer, FileStorage found 

問題がファイルタイプであることがわかりました。 openはファイル名を探していて、ファイルがフラスコにアップロードされているときは、openコマンドに渡されているファイルのインスタンスです。しかし、私はこの仕事をどうやって作るのか分かりません。私は、開いているコマンドをスキップし、単にデータ= f.read()を使用しようとしましたが、それは動作しません。助言がありますか?

おかげ

+0

_ "私はopenコマンドをスキップし、データだけを使用して試した= f.read()が、それは動作しません。 。"_ 何が起こるのですか? – glibdud

+0

情報が入っていない空の文字列を作成するだけです。 – user3761017

答えて

0

他人がこれを必要とする場合に備えて自分の質問に答える。

ファイル記憶オブジェクトがio.BytesIOなり.stream属性を持っている

f = request.files['data_file'] 
df = pandas.read_csv(f.stream) 
1

FileStorageは、入力データの周りのファイルのようなラッパーです。 read_csvに直接渡すことができます。

pd.read_csv(request.files['data_file']) 

CSVモジュールはそれを処理する必要がありますし、素朴な交換が引用された列に破損したデータをできる限りあなたはほとんどの場合、データ上のものreplaceの呼び出しを実行するべきではありません。しかし、それでも必要な場合は、前と同じようにデータを読み取ることができます。

data = request.files['data_file'].read() 

データに複数の引用スタイルがある場合は、データのソースを修正する必要があります。

+0

私はdata = request.files ['data_file']。read()を使ってみましたが、作成した文字列がクラッシュしない間は空白です。私は助けに感謝します。ありがとう。 – user3761017

関連する問題