2

好的,我正在编写一个读取文本文件并遍历不同行的程序,但是我遇到的问题是行尾 (\n)。我的目标是逐行读取文本文件并将其写入列表并在将其附加到列表之前删除行尾。

我试过这个:

thelist = []    
inputfile = open('text.txt','rU')    

for line in inputfile:
    line.rstrip()
    thelist.append(line)
4

7 回答 7

4

字符串在 Python 中是不可变的。所有字符串方法都返回字符串,并且不修改原始字符串,所以该行

line.rstrip()

有效地什么都不做。您可以使用列表推导来完成此操作:

with open("text.txt", "rU") as f:
    lines = [line.rstrip("\n") for line in f]

另请注意,强烈建议使用该with语句打开(和隐式关闭)文件。

于 2012-08-06T12:02:38.503 回答
3
with open('text.txt', 'rU') as f: # Use with block to close file on block exit
    thelist = [line.rstrip() for line in f]   
于 2012-08-06T12:02:52.133 回答
2

rstrip不改变它的参数,它返回修改后的字符串,这就是为什么你必须这样写:

thelist.append(line.rstrip())

但是您可以更简单地编写代码:

with open('text.txt', 'rU') as inputfile:
    thelist = [x.rstrip() for x in inputfile]
于 2012-08-06T12:02:21.960 回答
0

我想你需要这样的东西。

s = s.strip(' \t\n\r')

这将从字符串的开头和结尾去除空格

于 2012-08-06T12:02:23.713 回答
0

rstrip('\n')在附加到列表之前在每一行上使用。

于 2012-08-06T12:02:37.893 回答
0

rstrip返回一个新字符串。应该是line = line.rstrip()。但是,整个代码可能会更短:

thelist = list(map(str.rstrip, open('text.txt','rU')))

UPD:请注意,仅调用rstrip()修剪所有尾随空格,而不仅仅是换行符。但是也有一种简洁的方法可以做到这一点:

thelist = open('text.txt','rU').read().splitlines()
于 2012-08-06T12:07:59.427 回答
0

在 Python 中 - 字符串是不可变的 - 这意味着操作返回一个字符串,并且不修改现有字符串。即,您做对了,但需要使用line = line.rstrip().

于 2012-08-06T12:10:00.910 回答