打开已在Flask中上载的文件

时间:2017-02-10 19:18:12

标签: python flask

我正在尝试修改上传到我的烧瓶应用程序中的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()但这不起作用。有什么建议吗?

由于

2 个答案:

答案 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)