如何在文件读取期间从每一行中删除换行符?

时间:2013-09-18 06:23:05

标签: python string file-io

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

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 个答案:

答案 0 :(得分:12)

您可以使用list comprehension

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

答案 1 :(得分:5)

您可以使用map

with open('words.txt') as f:
   words = map(str.rstrip, f)

答案 2 :(得分: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")
    ...

答案 3 :(得分:2)

如果每行处理多个单词,您可能需要拆分该行。

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

这将创建一个列表列表,其中大部分是一个元素长。所以,例如你可以做到这一点。

for words in result:
    print len(words)