2017-02-10 31 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) 

我將其上傳到燒瓶中,並使用它

f = request.files['data_file'] 

訪問當我運行它通過上面的代碼,以代替開放(「example.csv」)打開(f)中,我得到的以下錯誤

coercing to Unicode: need string or buffer, FileStorage found 

我已經發現問題是這裏的文件類型。我無法在我的文件上使用open,因爲open正在查找一個文件名,並且當文件上傳到flask時,它就是正在傳遞給open命令的文件的實例。但是,我不知道如何使這項工作。我試過跳過打開的命令,只是使用data = f.read(),但不起作用。有什麼建議麼?

由於

+0

_「我試着跳過打開命令,只是用數據= f.read(),但不工作。「_ 怎麼了? – glibdud

+0

它只是創建一個沒有任何信息的空字符串。 – user3761017

回答

0

回答我自己的問題,以防別人需要這個。

FileStorage對象有這將是一個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']) 

你很可能不應該對數據執行這些replace呼叫,csv模塊應該處理和天真更換可以在引用列損壞的數據。但是,如果您仍然需要,可以像以前一樣讀取數據。

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

如果您的數據有多種引用樣式,則應該修復數據源。

+0

我試過使用data = request.files ['data_file']。read()並且它不會崩潰它創建的字符串是空的。我欣賞幫助。謝謝。 – user3761017