【问题标题】:TypeError: expected a character buffer object - while trying to save integer to textfileTypeError:期望一个字符缓冲区对象-尝试将整数保存到文本文件时
【发布时间】:2012-03-20 12:40:27
【问题描述】:

我正在尝试制作一个非常简单的“计数器”,用来记录我的程序执行了多少次。

首先,我有一个只包含一个字符的文本文件:0

然后我打开文件,将其解析为int,将1 添加到值中,然后尝试将其返回到文本文件:

f = open('testfile.txt', 'r+')
x = f.read()
y = int(x) + 1
print(y)
f.write(y)
f.close()

我想让y 覆盖文本文件中的值,然后关闭它。

但我得到的只是TypeError: expected a character buffer object

编辑:

尝试将y 解析为字符串:

f.write(str(y))

给予

IOError: [Errno 0] Error

【问题讨论】:

    标签: python file parsing


    【解决方案1】:

    您检查过write() 的文档字符串吗?它说:

    write(str) -> 无。将字符串 str 写入文件。

    注意,由于缓冲的原因,之前可能需要使用 flush() 或 close() 磁盘上的文件反映了写入的数据。

    所以你需要先将y 转换为str

    还要注意,字符串将被写入文件末尾的当前位置,因为您已经读取了旧值。使用f.seek(0) 到达文件的开头。`

    编辑:至于IOErrorthis issue 似乎相关。从那里引用:

    对于同时允许读写(或追加)的模式 (那些包括“+”号),流应该被刷新(fflush) 或在任一读数之间重新定位(fseek、fsetpos、rewind) 操作后跟写操作或写操作 然后是读取操作。

    所以,我建议你试试f.seek(0),也许问题就会消失。

    【讨论】:

      【解决方案2】:
      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)
      

      【讨论】:

        【解决方案3】:

        试试下面的代码:

        我看到你已经插入了'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()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-17
          • 1970-01-01
          • 1970-01-01
          • 2017-04-18
          • 2023-03-29
          • 2019-11-27
          相关资源
          最近更新 更多