-3

以下是我的代码:

def byFreq(pair):
    return pair[1]

def ratio(file):
    #characterizes the author and builds a dictionary
    text = open(file,'r').read().lower()
    # text += open(file2,'r').read().lower()
    # text += open(file3,'r').read().lower()
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~':
        text = text.replace(ch, ' ')
    words = text.split()

    "construct a dictionary of word counts"
    counts = {}
    wordNum = 0
    for w in words:
        counts[w] = counts.get(w, 0) + 1
        wordNum = wordNum + 1
    # print ("The total number of words in this text is ",wordNum)

    "output analysis of n most frequent words"
    n = 50
    items = list(counts.items())
    items.sort()
    items.sort(key=byFreq, reverse=True)

    # print("The number of unique words in", file, "is", len(counts), ".")
    r = {}
    for i in range(n):
        word, count = items[i]

        "count/wordNum = Ratio"
        r[word] = (count/wordNum)
    return r




def main():
    melvile = ratio("MelvilleText.txt")
    print(melvile)
    outfile = input("File to save to: ")
    text = open(outfile, 'w').write()
    text.write(melvile)

main()

我不断收到以下错误:

Traceback (most recent call last):
  File "F:/PyCharm/Difficult Project Testing/dictionarygenerator.py", line 48, in <module>
    main()
  File "F:/PyCharm/Difficult Project Testing/dictionarygenerator.py", line 43, in main
    text = open(outfile, 'w').write()
TypeError: write() takes exactly 1 argument (0 given)

谁能告诉我我做错了什么以及如何解决它,因为我无法弄清楚。任何帮助将不胜感激,谢谢。

4

3 回答 3

1

另一个答案是关于空写的。text = open(outfile, 'w').write()应该只是text = open(outfile, 'w')。下一个问题是 dicts 不能直接写入文件,它们需要以某种方式编码为字符串或二进制表示。

有很多方法可以做到这一点,但两个流行的选项是 pickle 和 json。两者都不适合人类读者。

import pickle

... all of your code here

with open(outfile, 'w') as fp:
    pickle.dump(melville, fp)

或者

import json

... all of your code here

with open(outfile, 'w') as fp:
    json.dump(melville, fp)
于 2014-12-12T16:45:33.610 回答
0

你这里有两个问题。

首先,你第一次调用时没有写任何东西write()。只需要调用一次。

text = open(outfile, 'w')
text.write(melvile)

text打开文件进行写入后,您需要告诉对象要写入的内容。

其次,melville不是字符串。假设您只想将值打印到文本文件,则可以打印字典。

text = open(outfile, 'w')
for key in melville:
    text.write("%s: %f\n", key, melville[key])
于 2014-12-12T16:35:52.533 回答
0
text = open(outfile, 'w').write()
text.write(melvile)

首先,删除不带参数的 write()。这导致了你的错误。

其次,您必须关闭文件。添加 text.close()。

第三,'melvile' 不是字符串。如果您想用最简单的方法将其转换为字符串,请使用 str(melville)。这会将其转换为字符串,例如您是否可以看到 print(melvile)。

于 2014-12-12T21:29:39.603 回答