【时间】2018.11.14

【题目】在python中读取文件时如何去除行末的换行符以及在Windows与Linux中的区别

 

一、去除换行符

以使用readline进行读取为例:

import re

data =[]

f = open("data.txt", "r")

line = f.readline() # 读取一行文件,包括换行符

# line = line[:-1]  # 去掉换行符(方法1)

#line = re.sub('\n','',line) #方法2

line = line.strip() #方法3

data.append(line)

while line:  # 直到读取完文件

    line = f.readline()

    # line = line[:-1]

    #line = re.sub('\n','',line)

    line = line.strip() 

    if line != '':

     data.append(line)

f.close()

print(data)

 

二、在Windows与Linux中的区别

2.1windows

在window中,只要按照上面的代码即可去除换行符,即“\n”会直接被去掉,如下:

没有去掉换行符时:

去掉换行符后:

2.2.Linux

在Linux中,若直接去掉换行符(方法1与方法2),“\n”不会直接被去掉,而是会被‘\r’(回车符)代替,如下:

当然此时若再使用strip()也可以将‘\r’去除。

如果使用方法3,即用strip(),则可以去除:

所以建议使用方法3去除换行符。

 


2018.11.24补充

三、在Windows与Linux中换行符有所区别的原因

这主要是两种系统的换行符不同导致的,其中Linux的换行符时\n,而Windows的换行符是\r\n(就是说当你在文本编辑器中敲下回车键或者在代码中(w模式下)使用write(‘\n’)命令写入换行时,‘\n’会自动转换为‘\r\n’,读取时‘\r\n’会自动转换为‘\n’),当代码中的open是以‘r’模式打开时,两者没有区别,都是显示\n,而当以二进制模式‘rb’打开时,就会显现出不同。下面是在Windows和Linux中的测试(data.txt都是直接用各自系统的文本编辑器输入内容的。):

代码:

f = open('data.txt','r')
print(list(f))
f = open('data.txt','rb')
print(list(f))

Windows中运行结果:

Linux中运行结果:

因此,第二节中之所以出现在Linux中去除结尾的\n还剩下\r,是因为博主测试时的data.txt文件都是在Windows中编辑的,所以换行符在Windows中以文本方式显示是\n,在Linux中以文本方式显示的是\r\n。

 

 

Logo

更多推荐