1

我正在尝试将 csv 流式传输到 azure blob 存储,csv 是直接从没有本地副本的 python 脚本生成的,我有以下代码,df 是 csv 文件:

    with open(df,'w') as f:
       stream = io.BytesIO(f)
       stream.seek(0)
       block_blob_service.create_blob_from_stream('flowshop', 'testdata123', stream)

然后我得到了错误按摩:

  stream = io.BytesIO(f)  TypeError: a bytes-like object is required, not '_io.TextIOWrapper'

我认为问题是格式不正确,请您找出问题所在。谢谢。

4

1 回答 1

2

您打开df写入,然后尝试将生成的文件对象作为初始化程序传递io.BytesIO (它应该采用实际的二进制数据,例如b'1234')。这就是TypeError; 打开的文件(读取或写入、文本或二进制文件)不是bytes或任何类似的文件(bytearrayarray.array('B')mmap.mmap等),因此将它们传递给io.BytesIO没有意义。

看起来您的目标是从中读取df而您根本不需io.BytesIO要这样做。只需将模式从(文本)写入,,更改'w'为二进制读取,'rb'。然后将生成的文件对象直接传递给您的 API:

with open(df, 'rb') as f:
   block_blob_service.create_blob_from_stream('flowshop', 'testdata123', f)

更新:显然df是您的实际数据,而不是要打开的文件名。鉴于此,您应该真正跳过流 API(如果数据已经在内存中,这将毫无意义)并直接使用基于bytesAPI

block_blob_service.create_blob_from_bytes('flowshop', 'testdata123', df)

或者如果dfstr,不是bytes

block_blob_service.create_blob_from_bytes('flowshop', 'testdata123', df.encode('utf-8'))
于 2018-03-28T21:54:34.317 回答