python csv 格式文件 中文乱码问题解决方法

本文介绍如何解决Python处理中文CSV文件时出现的乱码问题,包括调整文件编码、使用正确的编码方式导出文件等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我遇到的问题是使用pandas的DataFrame to_csv方法实现csv文件输出,但是遇到中文乱码问题,已验证的正确的方法是:

df.to_csv("cnn_predict_result.csv",encoding="utf_8_sig")

-----------------------------------------------------------------------------------------------------------------------------------------------------

转载:

使用python2处理中文时,经常会出现乱码问题,之前使用Python处理中文csv文件时,处理过程程序输出出现了乱码,最后在程序中能够正常显示出中文,但是导出文件时,使用excel打开出现了中文乱码问题,但是使用ultraedit打开时,能正常显示。现在找到了问题的所在,总结如下:


1)程序输出中出现乱码的原因是因为python2中中文编码的问题,需要注意的是要将处理的中文文件的编码和python源文件的编码保持一致,这样不会出现中文乱码。可以参考这两篇文章关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定Python中用encoding声明的文件编码和文件的实际编码之间的关系

2)在程序中能够正常输出中文,但是导出到文件后使用excel打开是出现中文乱码是因为excel能够正确识别用gb2312、gbk、gb18030或utf_8 with BOM 编码的中文,如果是utf_8 no BOM编码的中文文件,excel打开会乱码。


根据以上两点,结合自己的情况:我使用的是jupyter的ide,创建的python源文件为utf8 no BOM格式的编码,而要处理的csv文件是用gbk编码的,所以我需要将使用gbk编码的csv文件转为utf_8编码。


[python]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. import codecs  
  2.   
  3. def ReadFile(filePath,encoding):  
  4.     with codecs.open(filePath,"r",encoding) as f:  
  5.         return f.read()  
  6. def WriteFile(filePath,u,encoding):  
  7.     with codecs.open(filePath,"w",encoding) as f:  
  8.         f.write(u)  
  9. ''''' 
  10. 定义GBK_2_UTF8方法,用于转换文件存储编码 
  11. '''  
  12. def GBK_2_UTF8(src,dst):  
  13.     content = ReadFile(src,encoding='gbk')  
  14.     WriteFile(dst,content,encoding='utf_8')  
  15.       
  16.   
  17. ''''' 
  18. qyx.csv文件使用GBK编码存储,现在将其转为UTF_8存储 
  19. '''  
  20. src = 'qyx.csv'  
  21. dst = 'qyx_utf8.csv'  
  22. GBK_2_UTF8(src,dst)  


使用上面的代码能够将使用GBK编码的文件转为UTF8编码的文件。接下来就是真正处理csv文件了。

[python]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. import pandas as pd  
  2. from urllib import unquote  
  3.   
  4. ''''' 
  5. 读取转换存储格式后的文件 
  6. '''  
  7. path = 'qyx_utf8.csv'  
  8. data = pd.read_csv(path,)  
  9. data.head()  



处理csv文件:

[python]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. ''''' 
  2. 使用unquote方法对第三列的url进行decode 
  3. '''  
  4. #data['newcol'] = data[u'关键词代码'].map(unquote) #这样会导致key识别错误,正确做法应该是去掉u  
  5. data['newcol'] = data['关键词代码'].map(unquote)#也可以使用ix来取得第三列的数据  
  6. #data['newcol'] = data.ix[:,3].map(unquote)  
  7.   
  8. data.head()  



将data导出到文件中:

[python]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. ''''' 
  2. 将结果导出到result.csv中,以UTF_8 with BOM编码(微软产品能正确识别UTF_8 with BOM存储的中文文件)存储 
  3. '''  
  4. #data.to_csv('result_utf8_no_bom.csv',encoding='utf_8')#导出的结果不能别excel正确识别  
  5. data.to_csv('result_utf8_with_bom.csv',encoding='utf_8_sig')  

使用excel打开result_utf8_no_bom.csv和result_utf8_with_bom.csv,发现能够正确识别result_utf8_with_bom.csv文件



转自:http://blog.youkuaiyun.com/xw_classmate/article/details/51940430

### Python 读取 CSV 文件乱码解决方案 当在 Python 中读取 CSV 文件时出现乱码问题,通常是由于文件的编码格式与 Python 默认使用的编码格式不匹配引起的。以下是几种常见的解决办法: #### 方法一:调整 `open()` 函数中的编码参数 可以通过设置 `encoding` 参数为 `'utf-8-sig'` 来解决问题。这种方式适用于大多数带有 BOM(字节顺序标记)的 UTF-8 编码文件[^1]。 ```python with open('example.csv', 'r', encoding='utf-8-sig') as file: content = file.readlines() for line in content: print(line.strip()) ``` --- #### 方法二:使用 `codecs` 模块处理特殊编码 如果需要更灵活地控制编码方式,可以借助 Python 自带的 `codecs` 模块。这种方法特别适合于需要兼容多种编码格式的场景[^2]。 ```python import codecs f = codecs.open('example.csv', 'r', encoding='utf-8-sig') reader = csv.reader(f) for row in reader: print(row) f.close() ``` 此处的关键在于指定了 `utf-8-sig` 编码,它能够自动跳过可能存在的 BOM 字符`\ufeff`[^5]。 --- #### 方法三:利用 Pandas 处理大文件或复杂数据结构 对于更加复杂的 CSV 文件操作,推荐使用 Pandas 库。Pandas 支持直接指定编码格式,并且提供了强大的数据分析功能[^3]。 ```python import pandas as pd df = pd.read_csv('example.csv', encoding='utf-8-sig') print(df.head()) ``` 通过上述代码,不仅可以轻松解决乱码问题,还能够快速查看和处理数据帧的内容。 --- #### 方法四:检测并转换未知编码格式 假如不确定目标 CSV 文件的确切编码类型,则可以先探测其真实编码再做相应修改。第三方库 chardet 或 cchardet 能够帮助完成这项任务[^4]。 ```python import chardet raw_data = open('unknown_encoding.csv', 'rb').read() result = chardet.detect(raw_data) encoding = result['encoding'] if encoding is not None and encoding.lower().startswith('utf'): df = pd.read_csv('unknown_encoding.csv', encoding=f'{encoding}-sig') else: df = pd.read_csv('unknown_encoding.csv', encoding=encoding) print(df.head()) ``` 此段脚本首先尝试识别原始文件的实际编码形式,随后依据结果动态设定合适的解码选项。 --- ### 总结 针对 Python 在读取 CSV 文件过程中产生的乱码现象,主要原因是源文件采用了不同于预期的标准字符集表示法。因此,在实际开发工作中应当注意明确了解所涉及文档的具体编码属性,并采取恰当措施予以纠正。以上列举了几种常见而有效的应对策略供参考选用。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值