我正在尝试计算文本文档中的单词数量,然后将总数写回到.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的正确方法吗?
答案 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))