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()
简单地说,我需要处理上传的文件而不将其保存在服务器上
使用 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()