繁体   English   中英

在文件上写输出在python中不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM