如何读取没有换行符的文件?

问题描述 投票:318回答:10

在Python中,调用

temp = open(filename,'r').readlines()

产生一个列表,其中每个元素都是文件中的一行。这有点愚蠢,但仍然:readlines()还在每个元素上写入换行符,这是我不希望发生的事情。

如何避免?

python line-breaks readlines
10个回答
473
投票

您可以使用str.splitlines读取整个文件并分割行:

str.splitlines

或者您也可以手工删除换行符:

temp = file.read().splitlines()

注意:仅当文件以换行符结尾时,后一种解决方案才有效,否则最后一行将丢失字符。

此假设在大多数情况下是正确的(尤其是对于文本编辑器创建的文件,无论如何,它们经常do都会添加结尾换行符。]

如果要避免这种情况,可以在文件末尾添加换行符:

temp = [line[:-1] for line in file]

或更简单的替代方法是换行with open(the_file, 'r+') as f: f.seek(-1, 2) # go at the end of the file if f.read(1) != '\n': # add missing newline if not already present f.write('\n') f.flush() f.seek(0) lines = [line[:-1] for line in f]

strip

甚至,尽管很难理解:

[line.rstrip('\n') for line in file]

[利用了以下事实:[line[:-(line[-1] == '\n') or len(line)+1] for line in file] 的返回值不是布尔值,而是被评估为true或false的对象。


or方法实际上等效于:

readlines

因为def readlines(self): lines = [] for line in iter(self.readline, ''): lines.append(line) return lines # or equivalently def readlines(self): lines = [] while True: line = self.readline() if not line: break lines.append(line) return lines 保留换行符,readline()保留换行符。

[注意:为使readlines()对称,readlines()方法不会not添加结尾换行符,因此writelines()writelines()中产生f2.writelines(f.readlines())的精确副本。


-6
投票
temp = [line.rstrip() for line in open("filename")]

30
投票
f

10
投票
f2

10
投票

另一个例子:

一次读取文件。从字符串temp = open(filename,'r').read().split('\n') ]的结尾处删除不需要的字符

temp = open(filename,'r').read().splitlines()

另请参阅str.rstrip(chars)str.rstrip(chars)

((python> = 2.0)


10
投票

我认为这是最好的选择。


1
投票

尝试一下:


0
投票
str.lstrip([chars])

0
投票

要删除所有前导和尾随空格(从temp = [line.strip() for line in file.readlines()] 启发而来-


-1
投票
temp = [line.strip() for line in open("filename")]
© www.soinside.com 2019 - 2024. All rights reserved.