8

我正在从包含一个 [*] 字/行的文件中读取行,例如:

dog
cat
person
tree

这些单词中的每一个还包含一个换行符\n。我想将它们读入列表并丢弃换行符。我设计的方式是阅读readlines()列表,然后将列表处理strip()为换行符:

with open('words.txt') as f:
    words = f.readlines()

for index, word in enumerate(words):
    words[index] = word.strip()

这很好用,但我不禁想到有一种更有效的方法可以做到这一点,在读取过程中去除换行符。但我找不到办法。有没有更高效的东西(同时还要考虑可读性等)

[*] 更新:我应该提到有些行可能包含多个单词,在这种情况下,一行中的许多单词应该放在一个列表项中。到目前为止,这两个答案都处理了这个问题(我自己的代码也是如此),但我想提一下。

4

4 回答 4

15

您可以使用列表理解

with open('words.txt') as f:
    words = [word.strip() for word in f]
于 2013-09-18T06:24:57.590 回答
5

您可以使用map

with open('words.txt') as f:
   words = map(str.rstrip, f)
于 2013-09-18T06:24:15.370 回答
2

为了每行处理一个以上的单词,您可能需要拆分该行。

with open('words.txt') as f:
    result = [words.strip().split() for words in f]

这将创建一个列表列表,其中大部分是一个元素长。因此,例如,您可以这样做。

for words in result:
    print len(words)
于 2013-09-18T06:49:40.817 回答
2

你可以写:(lines = [s.rstrip("\n\r") for s in f.readlines()]注意它不仅仅是strip,它会做的不仅仅是删除 EOL 字符)。

但是,如果您的文件很大,您应该循环处理每一行,而不是加载整个文件,例如:

while True:
    s = f.readline()
    if s == "":
        break   # end of file
    line = s.rstrip("\n\r")
    ...
于 2013-09-18T06:30:02.973 回答