我需要一些帮助来弄清楚如何将文本文件中的单词拆分成列表。我可以使用这样的东西:
words = []
for line in open('text.txt'):
line.split()
words.append(line)
但如果文件包含多行文本,则会将它们拆分为子列表,例如
this is the first line
this is the second line
变为:
[['this', 'is', 'the', 'first', 'line'], ['this', 'is', 'the', 'second', 'line']]
如何制作它们以使它们在同一个列表中?即。
[['this', 'is', 'the', 'first', 'line', 'this', 'is', 'the', 'second', 'line']]
谢谢!
编辑: 该程序将打开多个文本文件,因此需要将每个文件中的单词添加到子列表中。因此,如果文件有多行,则这些行中的所有单词应一起存储在子列表中。 即每个新文件都会启动一个新的子列表。
答案 0 :(得分:3)
你可以使用列表理解来平整单词列表
[word for words in line.split() for word in words]
这与写作
相同result = []
for words in line.split():
for word in words:
result.append(word)
或者你可以使用itertools.chain.from_iterable
,就像这样
from itertools import chain
with open("Input.txt") as input_file:
print list(chain.from_iterable(line.split() for line in input_file))
答案 1 :(得分:3)
您的代码实际上并没有按照您的说法执行操作。 line.split()
只返回行中的单词列表,您不做任何事情;它不会以任何方式影响line
,因此当您执行words.append(line)
时,您只需附加原始行,即单个字符串。
所以,首先,你必须解决这个问题:
words = []
for line in open('text.txt'):
words.append(line.split())
现在,您正在做的是重复将新的单词列表附加到空列表中。所以当然你会得到一个单词列表。这是因为你混淆了the append
and extend
methods of list
。 append
接受任何对象,并将该对象添加为列表的新元素; extend
接受任何迭代,并将该iterable的每个元素添加为列表的单独新元素。
如果你也解决了这个问题:
words = []
for line in open('text.txt'):
words.extend(line.split())
......现在你得到了你想要的东西。
答案 2 :(得分:1)
不确定为什么要保留[[]]但是:
words = [open('text.txt').read().split()]