打开Flask中已上传的文件

use*_*017 3 python flask

我正在尝试修改上传到我的 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)
Run Code Online (Sandbox Code Playgroud)

我将其上传到烧瓶并使用访问它

f = request.files['data_file']
Run Code Online (Sandbox Code Playgroud)

当我通过上面的代码运行它,用 open(f) 替换 open('example.csv') 时,出现以下错误

coercing to Unicode: need string or buffer, FileStorage found
Run Code Online (Sandbox Code Playgroud)

我发现问题出在这里的文件类型。我无法在我的文件上使用 open ,因为 open 正在查找文件名,并且当文件上传到 Flask 时,它是传递给 open 命令的文件的实例。但是,我不知道如何进行这项工作。我尝试跳过 open 命令并仅使用 data = f.read() 但这不起作用。有什么建议么?

谢谢

dav*_*ism 6

FileStorage是传入数据的类似文件的包装器。您可以直接将其传递给read_csv.

pd.read_csv(request.files['data_file'])
Run Code Online (Sandbox Code Playgroud)

您很可能不应该对replace数据执行这些调用,因为 CSV 模块应该处理该问题,而简单的替换可能会损坏引用列中的数据。但是,如果您仍然需要,您可以像以前一样读出数据。

data = request.files['data_file'].read()
Run Code Online (Sandbox Code Playgroud)

如果您的数据混合了多种引用样式,则应修复数据源。