2015-01-18 2 views
0
>>> file = open('foo.txt') 
>>> file.seek(2) 
2 
>>> file.read(1) 
'\n' 
>>> file.tell() 
4 

왜 현재 위치가 1 문자 앞으로 이동하지 않았습니까? '\n'는 1 문자로되어 있지 않습니까? 파일의 처음 4 개 라인의파이썬에서 텍스트 파일의 Null 문자

내용 :

1 PS

@

@ @ 2
@ : 나는 창문에 있어요.

+0

두 번째 위치에 커서를 놓고 세 번째 문자를 읽고 앞으로 이동하면 이제 네 번째 위치에 있습니다. 아니? – alfasin

+0

NO! 다른 캐릭터의 경우 한 위치 앞으로 이동합니다! – Amen

+0

파일의 내용을 게시하십시오. – alfasin

답변

4

file.tell() for a text file의 값을 해석하지 마십시오. 스트림의 위치를 ​​나타내는 불투명 한 숫자입니다 (file.seek()에 전달할 수 있음).

텍스트 파일에서 file.read(1)은 바이트가 아닌 하나의 유니 코드 문자 (코드 포인트)를 읽습니다. 텍스트 파일을 읽는 데 사용 된 문자 인코딩에 따라 하나의 유니 코드 코드 포인트가 1에서 4 바이트 (일반적으로) 일 수 있습니다.

기본값은 유니버설 개행 모드입니다. '\r\n', '\r', '\n'은 모두 '\n'으로 번역됩니다.

파일 내용을 바이트로 보려면 이진 모드 ('rb')로 엽니 다. file.tell()이 경우 바이트 단위의 리턴 위치.

b'\0' (null 바이트)은 Windows에서 일반적으로 나타나는 utf-16 인코딩을 나타냅니다.

관련 문제