Flask 通过 csv 模块即时处理上传的 csv

Flask handle uploaded csv on the fly by csv module

简单地说,我需要处理上传的文件而不将其保存在服务器上

使用 open() 在 cli 脚本中工作,一切都很好,


使用 flask 和通过 ajax 请求从数据发送的文件 open() 函数和 stream.read() 方法都没有帮助处理 csv

open 本身抛出异常

csv_f = open(request.files['csvfile'].stream, 'rb')
TypeError: expected str, bytes or os.PathLike object, not SpooledTemporaryFile

使用.read()我可以打印它

csv_f = request.files['csvfile'].stream.read()
data = csv.reader(csv_f, delimiter = ',')

print(csv_f)
b'...'

但迭代也会抛出异常

for row in data:
_csv.Error: iterator should return strings, not int (did you open the file in text mode?)

我只需要一种使用 csv 模块即时处理 csv 文件的方法

我发现了问题

文件将以二进制流而非普通文本形式抛出请求

这就是为什么它有一个读取方法但在迭代时没有用的原因

我不得不使用 .decode() 像这样

request.files['csvfile'].stream.read().decode("utf-8")

而不是这个 request.files['csvfile'].stream.read()