TypeError : 문자 버퍼 개체가 필요합니다-정수를 텍스트 파일에 저장하는 동안
내 프로그램이 실행되는 횟수를 추적 하는 매우 간단한 '카운터' 를 만들려고합니다 .
첫째, 한 문자 만 포함 된 텍스트 파일이 있습니다. 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
의 독독을 확인 했습니까 write()
? 그것은 말한다 :
쓰기 (str)-> 없음. 파일에 str 씁니다.
버퍼링으로 인해 디스크의 파일이 기록 된 데이터를 반영하기 전에 flush () 또는 close ()가 필요할 수 있습니다.
당신은 변환 할 필요가 그래서 y
에 str
처음.
또한 이미 이전 값을 읽었 기 때문에 파일의 끝에있는 현재 위치에 기록됩니다. 파일 f.seek(0)
의 시작 부분으로 이동하는 데 사용합니다 .`
편집 :에 관한 것은 IOError
, 이 문제는 관련 보인다. 거기에서 인용 :
읽기와 쓰기 (또는 추가)가 모두 허용되는 모드 ( "+"기호가 포함 된 모드)의 경우 스트림은 읽기 작업과 a 사이에 플러시 (fflush) 또는 재배치 (fseek, fsetpos, rewind)가 필요합니다. 쓰기 작업 또는 쓰기 작업 후 읽기 작업.
그래서 나는 당신이 시도 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)
아래 코드를 시도해.
보시다시피를 삽입 했거나이 명령은 파일을 읽기 모드로 열어서 쓸 수 파일 내용을 쓰기 쓰기 쓰기를 원하면 쓰기 모드 '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()
'ProgramingTip' 카테고리의 다른 글
음, std :: unique_ptr의 사용자 지정 (0) | 2021.01.07 |
---|---|
접두사를 CTRL + A로 다시 매핑 한 후 tmux에서 줄 시작으로 이동하는 방법은 무엇입니까? (0) | 2021.01.07 |
ActionBar의 아이콘을 동적으로 변경 (0) | 2021.01.07 |
내부 .NET Framework 데이터 공급자 오류 1025 (0) | 2021.01.07 |
unittest setUp으로 mock을 사용하는 방법 (0) | 2021.01.07 |