使用pandas.read_csv加载量热仪数据.txt文件遇UnicodeDecodeError求助
解决pandas.read_csv读取量热仪数据时的编码与分隔符问题
问题原因分析
- 错误
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0说明文件不是UTF-8编码,字节0xff是UTF-16编码的字节顺序标记(BOM)的一部分,大概率文件采用UTF-16编码。 - 数据采用多空格分隔,默认的逗号分隔符会导致pandas无法正确拆分列,同时编码错误会优先触发。
解决方案
1. 指定正确编码与空白分隔符
直接使用utf-16编码配合空白分隔符读取,代码如下:
import pandas as pd # 读取文件,指定UTF-16编码与任意空白分隔符 data = pd.read_csv('TestFile.txt', encoding='utf-16', sep='\s+') # 验证结果 print(data.head())
encoding='utf-16':自动识别UTF-16的BOM(无论LE/BE),解决解码错误。sep='\s+':匹配任意数量的空格、制表符等空白字符,正确拆分Time和HeatFlow两列。也可以用delim_whitespace=True替代sep='\s+',效果一致。
2. 备选编码尝试(如果UTF-16无效)
如果上述代码仍报错,可通过查看文件头部字节确认编码:
with open('TestFile.txt', 'rb') as f: print(f.read(4)) # 打印前4个字节
- 若输出为
b'\xff\xfe':使用encoding='utf-16-le' - 若输出为
b'\xfe\xff':使用encoding='utf-16-be'
3. 大文件处理说明
pandas的read_csv原生支持大文件读取,无需提前转换格式。如果文件过大导致内存压力,可添加chunksize参数分块读取:
# 分块读取,每块10000行 chunk_iter = pd.read_csv('TestFile.txt', encoding='utf-16', sep='\s+', chunksize=10000) for chunk in chunk_iter: # 处理单块数据 print(chunk.shape)
内容的提问来源于stack exchange,提问作者wrosenbe
相关产品推荐
相关产品推荐

