【问题标题】:Flask handle uploaded csv on the fly by csv module烧瓶句柄通过 csv 模块即时上传 csv
【发布时间】:2021-06-13 18:50:58
【问题描述】:

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

使用 open() 在 cli 脚本中工作一切正常,


使用烧瓶和通过 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 文件的方法

【问题讨论】:

  • 您从哪里获取文件(S3 存储桶、hadoop、远程服务器...)?
  • 通过ajax请求表单数据
  • open() 不会从烧瓶 request 对象打开文件
  • TypeError: expected str, bytes or os.PathLike object, not SpooledTemporaryFile

标签: python csv flask file-upload request


【解决方案1】:

我发现了问题

文件将作为二进制流而不是普通文本抛出请求

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-03
    • 2021-01-24
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2022-06-24
    相关资源
    最近更新 更多