我正在从包含一个[*]字/行的文件中读取行,例如:
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()
这很好用,但我不禁想到有一种更有效的方法来执行此操作,在读取过程中去除换行符。但我找不到办法。是否有更高效的东西(同时也考虑可读性等)
[*]更新:我应该提到某些行可能包含多个单词,但在这些情况下,行中的许多单词应该包含在单个列表项中。到目前为止,这两个答案都处理了这个问题(就像我自己的代码一样),但我想提一下。
答案 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)