读取txt文件返回不可读数组且报UnicodeDecodeError错误如何解决
问题分析与恢复方案
结论
数据没有丢失,可通过二进制读取+对应反序列化方式恢复。
问题根源
你保存文件时存在两个模式匹配错误:
- 写入时传入
f.write()的a并不是格式化后的纯文本浮点字符串,而是数值数组对象序列化后的二进制字节流(从读取到的乱码特征判断,大概率是pickle序列化后的内容) - 你使用文本模式
'w'写入二进制内容,读取时又用UTF-8文本解码,才会触发解码错误、得到乱码内容。
恢复步骤
第一步:以二进制模式读取文件原始内容
with open('file.txt', 'rb') as f: raw_bytes = f.read()
第二步:按原始序列化逻辑恢复数据
如果原始a是Python原生数值列表/普通可pickle对象,用pickle反序列化即可:
import pickle recovered_data = pickle.loads(raw_bytes)
如果原始a是numpy数值数组,也可以尝试直接从字节流加载:
import numpy as np # 如果原始数组是float32类型,把dtype改为np.float32即可 recovered_data = np.frombuffer(raw_bytes, dtype=np.float64)
后续正确保存建议
如果需要保存为人类可读的纯文本格式,不要直接写入数组对象,要先做格式化处理:
- numpy数组可直接调用封装方法:
np.savetxt('file.txt', a) - 原生列表可逐行转换为字符串后写入:
with open('file.txt', 'w') as f: for num in a: f.write(f"{num}\n")
内容的提问来源于stack exchange,提问作者Cla
相关产品推荐
相关产品推荐

