# 编程小白的学习记录
"""
朋友有一个生产管理的txt文档,让我帮忙把txt文件内容读取出来.
直接将windows的文件复制,在linux进行读取(电脑双系统)
"""
# 读取TXT文件
f=open("/home/dengshuo/DataStructure/a2.txt",'rt')
line=f.readline()
while line:
# 打印出每一行
print(line,end="")
line=f.readline()
f.close()
File "/home/dengshuo/anaconda3/lib/python3.6/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xba in position 27: invalid start byte
显示文件解码错误,utf-8不能识别 oxba
在文件默认的情况下,都是默认使用utf-8,尝试改变文本编码方式GB2312,还是出现同样的错误
oxBA(186): <186>
查阅Pythoncookbook,这个错误是没有正确的编码方式读取文件
open()函数提供了一个error参数来处理错误.
f=open("/home/dengshuo/DataStructure/a2.txt",'rt',errors='replace')
lines=f.readlines()
for line in lines:
print(line,)
f.close()
output:
home/dengshuo/anaconda3/bin/python "/home/dengshuo/PycharmProjects/dengshuo python/readtxt.py"
CE574,2-261,H180210-007-01,�����ͨ��,��,5052,5052,�Ͼ���ʱ��ó����˾,620,2080,7250,3,7350,25.592,76.776,313,82,76.79,93.65%,3��5��,3��30��
CF457,3-16,B180226-104-01,5ϵ������,��,5052,5052,��������Դ,620,1380,6600,5,7000,16.171,80.854,346,86,79.67,92.64%,3��5��,3��30��
CE575,3-16,B180226-104-01,5ϵ������,��,5052,5052,��������Դ,620,1380,6600,5,7000,16.171,80.854,346,83,79.68,96.00%,3��5��,3��30��
错误的原因是没有识别文档中的汉字.
CE574,2-261,H180210-007-01,横剪普通板,—,5052,5052,南京恒时汇贸易有司,620,2080,7250,3,7350,25.592,76.776,313,82,76.79,93.65%,3月5日,3月30日
CF457,3-16,B180226-104-01,5系汽车板,—,5052,5052,奇瑞新能源,620,1380,6600,5,7000,16.171,80.854,346,86,79.67,92.64%,3月5日,3月30日
解决问题的办法也很简单,在linux文件下新建一个txt,将文本内容复制过来就可以成功读取.
/home/dengshuo/anaconda3/bin/python "/home/dengshuo/PycharmProjects/dengshuo python/readtxt.py"
CE574,2-261,H180210-007-01,横剪普通板,—,5052,5052,南京恒时汇贸易有司,620,2080,7250,3,7350,25.592,76.776,313,82,76.79,93.65%,3月5日,3月30日
CF457,3-16,B180226-104-01,5系汽车板,—,5052,5052,奇瑞新能源,620,1380,6600,5,7000,16.171,80.854,346,86,79.67,92.64%,3月5日,3月30日
CE575,3-16,B180226-104-01,5系汽车板,—,5052,5052,奇瑞新能源,620,1380,6600,5,7000,16.171,80.854,346,83,79.68,96.00%,3月5日,3月30日
CF458,3-17,B180226-104-02,5系汽车板,—,5052,5052,奇瑞新能源,620,1380,6600,5,7000,16.171,80.854,346,83,79.70,96.02%,3月5日,3月30日
Process finished with exit code 0
后记:关于unix和windows上有一个关于换行符的识别(\n 和\r\n 之争)
Python在"通用型换行符"模式下,在读取时将换行符转换成一个单独的 \n 字符