计算.txt中的单词数,然后将结果写入相同的.txt中

时间:2018-06-27 22:26:06

标签: python python-3.x micropython

我正在尝试计算文本文档中的单词数量,然后将总数写回到.txt

这是我走了多远

words = 0
   f = open("count.txt", 'r+')

for wordcount in f.readline().split(" "):
   words += 1


print('number of words ')
print(words)


f.write("number of words ")
f.write(words)
f.close()

我收到此错误

TypeError: expected a character buffer object

我要去哪里错了?

我觉得f.write(words)不是将总数写入txt的正确方法吗?

4 个答案:

答案 0 :(得分:2)

file.write仅接受文本缓冲区,因此您需要先将words转换为字符串,然后再将其写入文件:

f.write(str(words))

答案 1 :(得分:2)

必须先将words转换为字符串,然后才能将其写入文件。

with open("count.txt", "r+") as f:
    words = len(f.read().split())
    print('number of words ')
    print(words)

    f.write("number of words ")
    f.write(str(words))

此外:

readline仅读取一行。使用read读取整个文件。

使用len来计算列表的大小,而无需自己计算

使用with确保文件将被关闭

答案 2 :(得分:1)

f.write需要一个字符串作为参数,与print不同,{p> hosted node会接受任意数量的任何类型的对象,并自动将它们全部转换为字符串,并使用可配置的分隔符将它们连接以及可配置的结尾等等。

换句话说,print聪明而友善; write是一个底层函数。因此,要与write配合使用,您必须手动进行转换。

f.write(str(words))

但是您也可以只使用print而不是调用f.write

print(words, file=f)

请注意,这不会做完全相同的事情。默认情况下,当您调用print时,它将在末尾添加换行符。因此,这段代码:

print('number of words ')
print(words)

…将打印出两行:

number of words
3

同样,此代码:

print('number of words ', file=f)
print(words, file=f)

…将在文件中添加相同的两行。

答案 3 :(得分:1)

单词必须转换为字符串。 File.write()实际上是要写的东西。

您的新代码:

f.write("number of words ")
f.write(str(words))