我正在尝试修改上传到我的烧瓶应用程序中的csv。当我不通过烧瓶上传它时,我的逻辑运行正常。
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']
当我通过上面的代码运行它时,用open(f)替换open('example.csv'),我得到以下错误
coercing to Unicode: need string or buffer, FileStorage found
我已经发现问题是这里的文件类型。我不能在我的文件上使用open,因为open正在查找文件名,当文件上传到flask时,它是传递给open命令的文件的实例。但是,我不知道如何使这项工作。我试过跳过open命令并只使用data = f.read()但这不起作用。有什么建议吗?
由于
答案 0 :(得分:1)
FileStorage
是一个类似文件的传入数据包装器。您可以将其直接传递给read_csv
。
pd.read_csv(request.files['data_file'])
您很可能不应该对数据执行replace
次调用,因为CSV模块应该处理这种情况,并且天真的替换可能会破坏引用列中的数据。但是,如果您仍然需要,您可以像以前一样读取数据。
data = request.files['data_file'].read()
如果您的数据混合了引用样式,则应修复数据来源。
答案 1 :(得分:1)
在别人需要的情况下回答我自己的问题。
FileStorage对象的.stream属性为io.BytesIO
f = request.files['data_file']
df = pandas.read_csv(f.stream)