[英]writing output on file doesn't work in python
我有下面的代码来写出Python中的N-gram列表。
从nltk.util导入ngrams
def word_grams(words, min=1, max=6):
s = []
for n in range(min, max):
for ngram in ngrams(words, n):
s.append(' '.join(str(i) for i in ngram))
return s
email = open("output.txt", "r")
for line in email.readlines():
with open('file.txt', 'w') as f:
for line in email:
prnt = word_grams(email.split(' '))
f.write("prnt")
email.close()
f.close()
当我打印出word_grams
它可以正确打印出文件,但是当将输出写入files.txt
它不起作用。 “ file.txt”为空。
所以我想问题一定在这些代码行之内:
for line in email.readlines():
with open('file.txt', 'w') as f:
for line in email:
prnt = word_grams(email.split(' '))
f.write("prnt")
email.close()
f.close()
1)最后的f.close()
做的事情比您想要的要多(循环内的f是另一个对象)
2)您将文件命名为“ file.txt”,但要在“ files.txt”中输出。 您确定要查找正确的文件吗?
3)您正在覆盖电子邮件中每一行的文件。 也许“ file.txt”的with
语句应该在循环之外。
4)您写的是"prnt"
而不是prnt
像这样吗
def word_grams(words, min=1, max=6):
s = []
for n in range(min, max):
for ngram in ngrams(words, n):
s.append(' '.join(str(i) for i in ngram))
return s
with open("output.txt", "r") as email:
with open('file.txt', 'w') as f:
for line in email.readlines():
prnt = word_grams(line.split(' '))
for ngram in prnt:
f.write(ngram)
我不知道您要确切地完成什么,但是似乎您想将word_grams
函数word_grams
文件“ output.txt”中的每个单词,并将输出保存到名为“ file.txt”的文件中,每行大概一个项目。
基于这些假设,我建议以这种方式重写您的迭代:
words = []
# load words from input
with open("output.txt") as f:
for line in f:
words += line.strip().split(" ")
# generate and save output
grams = apply(word_grams, words)
with open("file.txt", "w") as f:
f.write("\n".join(grams))
但是,此代码假定word_grams
函数正常工作。
您的循环代码:
for line in email:
没有跑!
因为在运行email.readlines()
之后,变量email
为空。 您可以进行一些测试,例如:
email = open("output.txt", "r")
for line in email.readlines():
print '1'
for line in email:
print '2'
如果output.txt中有3行,运行此测试后,您将获得:
1
1
1
在输出中。
您可以进行如下测试:
email = open("output.txt", "r")
email.readlines()
您将在output.txt中看到包含各行的列表。
但是当您再次运行email.readlines()
时,将得到一个空列表!
因此,应该是有问题的。您的可变email
在第二个循环中为空。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.