gpt4 book ai didi

python - 如何将 python 对象 pickle 到 csv 文件中?

转载 作者:行者123 更新时间:2023-12-01 02:14:28 25 4
gpt4 key购买 nike

我正在尝试将 python 对象 pickle 到 csv 文件中。我想将对象的 pickle 写入文件中的第三列。我想使用 pickle 来避免为复杂对象编写序列化。

写入 csv 的代码:

 with open(self.file_path, 'a') as csv_file:
wr = csv.writer(csv_file, delimiter='|')
row = ['klines', symbol]
row.extend(pickle.dumps(object))
wr.writerow(row)

读取 csv 的代码:

 with open(self.simulation_file_name, 'r') as csv_file:
line = csv_file.readline()
while line != '':
line = line.strip('\n')
columns = line.split('|')
event_type = line.pop(0)
symbol = line.pop(0)
pickled = line.pop(0)
klines = pickle.loads(klines)

我收到以下错误:

TypeError: a bytes-like object is required, not 'str'

最佳答案

要在 CSV 等文本文件中写入字节/二进制,请使用 base64 或其他方法来避免任何转义问题。代码简化并采用 python3。

import base64
with open('a.csv', 'a', encoding='utf8') as csv_file:
wr = csv.writer(csv_file, delimiter='|')
pickle_bytes = pickle.dumps(obj) # unsafe to write
b64_bytes = base64.b64encode(pickle_bytes) # safe to write but still bytes
b64_str = b64_bytes.decode('utf8') # safe and in utf8
wr.writerow(['col1', 'col2', b64_str])


# the file contains
# col1|col2|gANdcQAu

with open('a.csv', 'r') as csv_file:
for line in csv_file:
line = line.strip('\n')
b64_str = line.split('|')[2] # take the pickled obj
obj = pickle.loads(base64.b64decode(b64_str)) # retrieve

附注如果您编写的不是 utf8 文件(例如 ascii 文件),只需替换编码方法即可。

附注在 CSV 中写入字节是可能的,但并不优雅。一种替代方法是转储整个 dict,并将转储对象作为值并将键存储在 CSV 中。

关于python - 如何将 python 对象 pickle 到 csv 文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48456900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com