Python读取CSV文件在Linux与Windows平台结果不一致的原因及解决方法
CSV跨平台读取乱码问题成因及修复方案
问题成因
- 编码参数不匹配:代码中指定的
latin-1编码与目标CSV文件的实际编码不符。该文件存储了包含法语重音的特殊字符(如Québec中的é),实际采用UTF-8编码,多字节存储的特殊字符被单字节的latin-1逐字节解码后,就会产生ò这类乱码。 - 跨平台表现差异的原因:Windows端显示正常属于巧合的兼容表现,大概率是Windows本地的文件被系统隐式转码为latin-1兼容编码,或是Windows控制台打印时自动做了转义适配,并非正确实现。
修复方案
- 核心修改:将打开文件时的编码参数改为
utf-8,匹配文件实际编码即可,其余逻辑无需改动:
import csv import re NAICS_dict_csv = {} with open(r'/home/mondjef/Downloads/naics-scian-2017-element-v3-eng.csv', 'r', newline='', encoding='utf-8') as f: reader = csv.reader(f) next(reader, None) for row in reader: if row[1] == '541120': print(row) if row[3] == 'Exclusion(s)': exclusion = re.sub('\((?:US|CAN|MEX)\)' , '', row[4]) NAICS_dict_csv[row[1]]['exclusions'].append(exclusion) elif row[3] == 'Inclusion(s)': NAICS_dict_csv[row[1]]['inclusions'].append(row[4]) elif row[3] == 'Illustrative example(s)': NAICS_dict_csv[row[1]]['examples'].append(row[4]) elif row[3] == 'All examples': NAICS_dict_csv[row[1]]['all_examples'].append(row[4])
- 兼容异常字符:如果修改编码后仍存在少量无法解码的字符,可以添加
errors='replace'参数,避免程序中断,无法解码的字符会被替换为�:
with open(r'/home/mondjef/Downloads/naics-scian-2017-element-v3-eng.csv', 'r', newline='', encoding='utf-8', errors='replace') as f:
- 跨平台路径兼容:如果需要在多系统运行同一份代码,可以用
os.path模块构造路径,避免硬编码的路径分隔符在不同系统下失效。
内容的提问来源于stack exchange,提问作者Jeff M
相关产品推荐
相关产品推荐

