Bootstrap

python中withopen读取时编码问题

参考博文

https://blog.csdn.net/qq_36999656/article/details/79909793

https://www.cnblogs.com/ArsenalfanInECNU/p/4811643.html


通常情况下加上encoding=‘utf-8’解决读写编码问题,例如

 with open(file[0],'r',encoding='utf-8') as f:
                data=f.read()       #读取整个文件
                data=f.readline()     #就读取一行,并且将指针向下移动一行,可以用循环语句来完成对全文的读取。
                data=f.readlines()   #返回的是一个列表,列表中每个元素都是一个字符串,每个字符串中的内容就是文件的一行文字,含行末的符号。


注解:如果文件太大,就不能用 read() 或者 readlines() 一次性将全部内容读入内存,可以使用 while 循环和 readlin() 来完成这个任务。
                                        
      

不能解决的情况下:

流程:以2进制方式读取,然后在解码

file=open('文件路径','rb')
data=file.read()
final_data=data.decode('该文件的编码方式')

如果不知道文件的编码方式:python模块中chardet  ,安装命令pip install chardet

import chardet
f=open('文件路径','rb')
f_read=f.read()
f_chaInfo=chardet.detect(f_read)
final_data=f_read.encoding(f_chaInfo['encoding'])

注解:f_charInfo的输出是这样的的一个字典{'confidence': 0.99, 'encoding': 'utf-8'}

 前面‘confidence’是置信概率,后面是推断出的编码方式。以上的结果,意思为推断这段字符串的编码方式为'utf-8'的概率为99%.
  经过测试,如果文件里的字符串比较少的话,chardet模块是比较难判断出正确的编码模式的,体现在置信概率比较小,字符串多的话,概率会大。少大于90%才可信。

得到编码方式后,就可以用来解码了。

;