TypeError:预期一个字符缓冲区对象 – 尝试将整数保存到文本文件
我试图做一个非常简单的“计数器”,应该logging我的程序执行了多less次。
首先,我有一个只包含一个字符的文本文件: 0
然后我打开文件,将其parsing为一个int
,将值加1
,然后尝试将其返回给文本文件:
f = open('testfile.txt', 'r+') x = f.read() y = int(x) + 1 print(y) f.write(y) f.close()
我想有y
覆盖文本文件中的值,然后closures它。
但我得到的是TypeError: expected a character buffer object
。
编辑:
试图将y
parsing为一个string:
f.write(str(y))
给
IOError: [Errno 0] Error
你检查了write()
的文档string? 它说:
写(str) – >无。 将stringstr写入文件。
请注意,由于缓冲,在磁盘上的文件反映写入的数据之前可能需要flush()或close()。
所以你需要首先将y
转换为str
。
另外请注意,string将被写入当前位置,该位置将在文件末尾,因为您已经读取了旧值。 使用f.seek(0)
到达文件的开头
编辑:至于IOError
, 这个问题似乎相关。 从那里引用:
对于允许读取和写入(或附加)的模式(包括“+”符号的模式),应该在读取操作和后面的读取操作之间刷新(fflush)或重新定位(fseek,fsetpos,倒回)写操作或写操作,然后是读操作。
所以,我build议你尝试f.seek(0)
,也许问题就消失了。
from __future__ import with_statement with open('file.txt','r+') as f: counter = str(int(f.read().strip())+1) f.seek(0) f.write(counter)
试试下面的代码:
正如我看到你已经插入'R +'或这个命令打开文件在读取模式,所以你不能写入它,所以你必须打开文件在写模式'W',如果你想覆盖文件内容和写新的数据,否则你可以附加数据到文件通过使用“a”
我希望这个能帮上忙 ;)
f = open('testfile.txt', 'w')# just put 'w' if you want to write to the file x = f.readlines() #this command will read file lines y = int(x)+1 print y z = str(y) #making data as string to avoid buffer error f.write(z) f.close()