csv file convert to io.BytesIO object, then stream to blob storage ,meets value type error:a bytes-like object is required, not '_io.TextIOWrapper'
csv file convert to io.BytesIO object, then stream to blob storage ,meets value type error:a bytes-like object is required, not '_io.TextIOWrapper'
我正在尝试将 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'
我认为问题出在格式不正确,请您确定问题所在。谢谢。
您打开 df
进行写入,然后尝试将生成的文件对象作为 io.BytesIO
的初始值设定项传递(应该采用实际的二进制数据,例如 b'1234'
) .这就是 TypeError
的原因;打开的文件(读或写,文本或二进制文件)不是 bytes
或任何类似的文件(bytearray
、array.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 (如果数据已经在内存中,这是没有意义的)并且直接使用 the bytes
based API :
block_blob_service.create_blob_from_bytes('flowshop', 'testdata123', df)
或者如果 df
是 str
,而不是 bytes
:
block_blob_service.create_blob_from_bytes('flowshop', 'testdata123', df.encode('utf-8'))
我正在尝试将 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'
我认为问题出在格式不正确,请您确定问题所在。谢谢。
您打开 df
进行写入,然后尝试将生成的文件对象作为 io.BytesIO
的初始值设定项传递(应该采用实际的二进制数据,例如 b'1234'
) .这就是 TypeError
的原因;打开的文件(读或写,文本或二进制文件)不是 bytes
或任何类似的文件(bytearray
、array.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 (如果数据已经在内存中,这是没有意义的)并且直接使用 the bytes
based API :
block_blob_service.create_blob_from_bytes('flowshop', 'testdata123', df)
或者如果 df
是 str
,而不是 bytes
:
block_blob_service.create_blob_from_bytes('flowshop', 'testdata123', df.encode('utf-8'))