使用Polars读取1.4GB大CSV文件出现乱码,求解决方法
解决Polars读取大文件时字符间出现\x00的问题
- 先检测文件实际编码:换了多种编码都无效时,确定文件真实编码是核心。可以读取文件前几KB数据用chardet检测,避免加载整个大文件:
import chardet with open("你的文件路径", 'rb') as f: raw_data = f.read(4096) # 读取前4KB数据 detect_result = chardet.detect(raw_data) print(f"检测到编码: {detect_result['encoding']}, 置信度: {detect_result['confidence']}")
根据检测结果调整编码参数:
- 如果检测结果是
UTF-16LE,把代码里的encoding='UTF-16BE'替换为encoding='UTF-16LE'; - 如果文件带BOM(字节顺序标记),直接使用
encoding='utf-16',Polars会自动识别BOM并处理字节顺序:base = pl.read_csv(file, encoding='utf-16', low_memory=False, use_pyarrow=True)
- 如果检测结果是
尝试关闭
use_pyarrow:PyArrow的CSV读取逻辑和Polars原生实现存在差异,试试用Polars原生读取方式:
base = pl.read_csv(file, encoding='UTF-16BE', low_memory=False)
- 排查文件本身问题:如果以上方法都无效,用文本编辑器(如Notepad++)打开文件片段查看编码信息,或者将文件另存为UTF-8格式后再用Polars测试读取。
内容的提问来源于stack exchange,提问作者lucasss
相关产品推荐
相关产品推荐

