【python】利用Python从文件中读取字符串(乱码问题)
2018-03-14 15:32
561 查看
首先声明这篇学习记录是基于python3的。
python3中,py文件中默认的文件编码就是unicode,不用像python2中那样加u,比如u'中文'。不过在涉及路径时,比如C:\Users\Administrator\Desktop\StudyNote\Python,还是要加r。
eg:r'C:\Users\Administrator\Desktop\StudyNote\Python'。
因为\是转义符,想输出'\'得写成'\\'才可以。加了r就可以让python自动处理字符串,不让'\'进行转义,因此最终的字符串就是C:\Users\Administrator\Desktop\StudyNote\Python的意思。 OK,继续讲。
首先要明确一点,你的py文件用什么文件编码不重要,都可以顺利执行。不过要保证一点,保存py文件时的编码必须与编码声明的一样。假设你的py文件开头有以下编码声明:
eg: # -*- coding: utf-8 -*-
那么保存py文件时的编码也要为utf-8。
另外再普及一下保存文件编码时的知识,用notepad++在选择编码模式的时候,有utf-8和utf-8 without BOM,这个BOM实际上是在文件开头加注了三个字符,用以表明本文件的编码方式为utf-8,但这个是不需要的,往往会导致读取文件的时候出错(因为多了三个字符嘛,如果要去掉的话还得[3:]一下,挺麻烦的)。所以我们一般用utf-8 without BOM. 再言归正传。我们在处理文本文件的时候,如果该文件是unicode编码,则不需要做任何的处理操作,直接用'r'参数读取直接可用:
eg:
f=open('文件路径','r') f_read=f.read() print(f_read)这样就能完整的输出文件里的字符串。
如果不是unicode编码,就不能直接用了,直接读会出现乱码。只能先以'rb'参数读取二进制文件的方式读取进来,read之后再解码。
eg:
f=open('文件路径','rb') f_read=f.read() f_read_decode=f_read.decode('该文件的编码方式') print(f_read_decode)这样才能完整显示,不然会有乱码出现。 问题又来了,往往我们并不知道该文件的编码方式,这该怎么办?
幸好python有个强大的工具chardet
eg:
import chardet f=open('文件路径','rb') f_read=f.read() f_charInfo=chardet.detect(f_read) f_charInfo的输出是这样的的一个字典{'confidence': 0.99, 'encoding': 'utf-8'}
前面‘confidence’是置信概率,后面是推断出的编码方式。以上的结果,意思为推断这段字符串的编码方式为'utf-8'的概率为99%.
经过我的测试,如果文件里的字符串比较少的话,chardet模块是比较难判断出正确的编码模式的,体现在置信概率比较小,字符串多的话,概率会大。我觉得至少大于90%才可信。
得到编码方式后,就可以用来解码了。
f_read_decode=f_read.decode(f_charInfo['encoding'])
print(f_read_decode) 最后补充一下chardet的安装方法:
pip install chardet
注意: 写的 log文件为 ANSI 格式保存,所以要解码为ANSIf=open('log.txt','rb')
f_read=f.read()
f_read_decode=f_read.decode('ANSI')
print(f_read_decode)
相关文章推荐
- 利用Python从文件中读取字符串(解决乱码问题)
- Python json文件读取及显示中文乱码的问题
- 解决python读取中文文件乱码问题
- java中读取excel文件中字符串乱码问题解决方法
- 利用python读取带有中文的字符串,和将带有中文的字符串写到txt文件中
- 利用Python的 with open功能加载读取py本地当前目录文件问题
- python读取txt文件时的中文乱码问题
- Python中读取文件乱码问题解决方案
- java中读取excel文件中字符串乱码问题解决方法
- Learning Python 015 Python3解决问题:读取文件时,出现乱码或者“UnicodeDecodeError 'gbk' codec can't decode” 错误
- JAVA 读取文件字符串乱码问题
- Python实现的json文件读取及中文乱码显示问题解决方法
- Python从文件中读取字符串,用正则表达式匹配中文字符的问题
- python读取\t\n的文件转换成html表格发送邮件(解决中文乱码问题)
- php 读取文件乱码问题
- 利用System类解决flash读取外部文本时乱码问题
- php 读取文件乱码问题
- (转)Python字符串的encode与decode研究心得——解决乱码问题
- Python字符串乱码问题
- Java读取properties文件中文乱码问题的解决