windows文本在linux系统下利用Python读取错误的问题

# 编程小白的学习记录

"""

 问题描述:

                 朋友有一个生产管理的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 字符


你可能感兴趣的:(Linux)