Python 将列表中的元素写入文件

Python 将列表中的元素写入文件,python,file,Python,File,Bigram是一个如下所示的列表- [('a', 'b'), ('b', 'b'), ('b', 'b'), ('b', 'c'), ('c', 'c'), ('c', 'c'), ('c', 'd'), ('d', 'd'), ('d', 'e')] 现在,我试图用下面的代码将列表中的每个元素作为单独的一行写入文件中- bigram = list(nltk.bigrams(s.split())) outfile1.write("%s" % ''.join(ele) for ele in

Bigram是一个如下所示的列表-

[('a', 'b'), ('b', 'b'), ('b', 'b'), ('b', 'c'), ('c', 'c'), ('c', 'c'), ('c', 'd'), ('d', 'd'), ('d', 'e')]
现在,我试图用下面的代码将列表中的每个元素作为单独的一行写入文件中-

 bigram = list(nltk.bigrams(s.split()))
 outfile1.write("%s" % ''.join(ele) for ele in bigram)
但我得到了这个错误:

TypeError:write()参数必须是str,而不是生成器

我想把结果存档-

('a', 'b') 
('b', 'b')
('b', 'b')
('b', 'c')
('c', 'c')
......
试试这个:

outfile1.writelines("{}\n".format(ele) for ele in bigram)

您正在将生成器理解传递给
write
,这需要字符串

如果我理解正确,您希望每行编写一个元组表示

您可以通过以下方式实现这一目标:

outfile1.write("".join('{}\n'.format(ele) for ele in bigram))

第二个版本将生成器理解传递给
writelines
,这样可以避免在写入之前在内存中创建大字符串(看起来更像是您的尝试)

它生成包含以下内容的文件:

('a', 'b')
('b', 'b')
('b', 'b')
('b', 'c')
('c', 'c')
('c', 'c')
('c', 'd')
('d', 'd')
('d', 'e')

这就是运算符优先级问题

您需要这样的表达式:

("%s" % ''.join(ele)) for ele in bigram
相反,您可以这样理解,其中parens中的部分实际上是一个生成器:

"%s" % (''.join(ele) for ele in bigram)
使用显式括号

请注意,bigram中ele的
(“%s”%''.join(ele))本身就是一个生成器。您需要对其中的每个元素调用
write

如果要在单独的行中写入每一对,则必须显式添加行分隔符。在我看来,最简单的方法是显式循环:

for pair in bigram:
  outfile.write("(%s, %s)\n" % pair)

你不能写发电机。你能告诉我们你是如何编写的(函数中有更多的代码)以及你想要什么样的输出吗?@jpp我已经做了修改,sop同时编辑了这个问题。您的代码生成aa、ab等行。。。不是元组表示。此外,没有任何解释的代码也不是很有用……当我打开文件时,它会显示更新的答案。我特别查找了的文档,并首先使用了列表理解,因为它说“将行列表写入流”。很高兴知道它也适用于生成器,但我想它实际上应该说“一个iterable of line”…是的,它适用于任何iterable,因为它处理一行又一行,事先不需要整个列表。
for pair in bigram:
  outfile.write("(%s, %s)\n" % pair)