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

编辑:

试图将yparsing为一个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()