Python2.7 Pandas保存UTF-8编码CSV时俄语数据被截断问题
解决Python 2.7下Pandas保存俄语Unicode CSV数据截断的问题
我之前在Python 2.7里处理俄文Unicode数据集时也踩过几乎一模一样的坑,给你几个经过验证的解决方案:
第一步:先确认问题出在哪
首先别着急改保存代码,先排查DataFrame本身是否完整:
- 打印列表长度和DataFrame的行数,确认数据有没有在转DataFrame时就丢了:
print("原列表长度:", len(a)) df = pd.DataFrame({'russian_words': a}) print("DataFrame行数:", len(df))
如果这两个数字不一致,那问题出在列表生成或者DataFrame创建环节,不是保存CSV的锅。
针对CSV保存截断的解决方案
方案1:调整Pandas to_csv的参数
Python 2.7里的Pandas对Unicode的CSV处理有不少细节要注意,试试给to_csv加上这些参数:
import pandas as pd import csv # 假设你的列表是a df = pd.DataFrame({'russian_words': a}) df.to_csv( 'russian_vocab.csv', encoding='utf-8-sig', # 带BOM,Windows下编辑器更容易识别编码 quoting=csv.QUOTE_ALL, # 给所有字段加引号,避免特殊字符打断行解析 escapechar='\\', # 转义引号等特殊字符 index=False # 不要保存默认的索引列 )
utf-8-sig比纯utf-8更友好,能避免Windows记事本打开时乱码;quoting=csv.QUOTE_ALL能确保每个俄语词汇都被引号包裹,不会因为字符里的特殊符号(比如引号、换行)导致CSV写入中断。
方案2:绕开Pandas,直接用codecs手动写入
如果Pandas的to_csv还是抽风,那就直接用Python标准库的codecs来写,更可控:
import codecs with codecs.open('russian_vocab.csv', 'w', encoding='utf-8-sig') as f: # 先写表头 f.write('russian_words\n') # 遍历列表写入,注意转义引号 for word in a: # 如果词汇里有双引号,替换成两个双引号符合CSV规范 escaped_word = word.replace('"', '""') f.write(f'"{escaped_word}"\n')
这种方式完全由你控制写入过程,不会有Pandas内部的隐性处理导致截断。
方案3:升级Pandas到Python 2.7支持的最新版
Python 2.7的Pandas最后一个稳定版本是0.24.2,如果你用的版本太老(比如0.20之前),可能存在Unicode处理的bug,升级试试:
pip install pandas==0.24.2
最后提醒
保存完CSV后,一定要用支持UTF-8的编辑器(比如Notepad++、VS Code)打开,选择编码为UTF-8或者UTF-8 with BOM,不要用Windows默认的记事本(默认编码是GBK,会显示乱码,容易误以为数据截断)。
内容的提问来源于stack exchange,提问作者MrMcMitkins
相关产品推荐
相关产品推荐

