파이썬에서 codecs.open 한후 read 시 읽은 글자수는??
글쓴이: marunguy / 작성시간: 수, 2009/10/07 - 12:12오후
파이썬 마을에 올렸는데 답변이 없어서.. TT_TT..
http://python.kr/viewtopic.php?p=68739#68739
아무래도 BOM 이 있는 utf-16 파일을 codecs.open 으로 열고 read시 버그가 있는듯 합니다.
아래와 같은 내용을 가진 BOM 이 없는 utf-16le 문자셋의 t.txt 파일을 생성합니다.ABCDEFGHIJKLMNOPQRSTUVWXYZ
먼저, 아래와 같은 코드를 실행합니다.
for i in range(1,20): f = codecs.open("t.txt", encoding="utf-16le") t = f.read(i) print i, len(t), t f.close()
그러면, 아래와 같이 원하는 글자수만큼 읽습니다.
1 1 A 2 2 AB 3 3 ABC 4 4 ABCD 5 5 ABCDE 6 6 ABCDEF 7 7 ABCDEFG 8 8 ABCDEFGH 9 9 ABCDEFGHI 10 10 ABCDEFGHIJ 11 11 ABCDEFGHIJK 12 12 ABCDEFGHIJKL 13 13 ABCDEFGHIJKLM 14 14 ABCDEFGHIJKLMN 15 15 ABCDEFGHIJKLMNO 16 16 ABCDEFGHIJKLMNOP 17 17 ABCDEFGHIJKLMNOPQ 18 18 ABCDEFGHIJKLMNOPQR 19 19 ABCDEFGHIJKLMNOPQRS
이번엔, t.txt 에 UTF-16LE BOM 을 추가하고 아래와 같은 코드를 실행합니다.
for i in range(1,20): f = codecs.open("t.txt", encoding="utf-16") t = f.read(i) print i, len(t), t f.close()
그러면, 아래와 같이 중간중간 원하는 글자수보다 더 많이 읽습니다.
1 1 A 2 2 AB 3 3 ABC 4 5 ABCDE 5 6 ABCDEF 6 8 ABCDEFGH 7 9 ABCDEFGHI 8 11 ABCDEFGHIJK 9 12 ABCDEFGHIJKL 10 14 ABCDEFGHIJKLMN 11 15 ABCDEFGHIJKLMNO 12 17 ABCDEFGHIJKLMNOPQ 13 18 ABCDEFGHIJKLMNOPQR 14 20 ABCDEFGHIJKLMNOPQRST 15 21 ABCDEFGHIJKLMNOPQRSTU 16 23 ABCDEFGHIJKLMNOPQRSTUVW 17 24 ABCDEFGHIJKLMNOPQRSTUVWX 18 26 ABCDEFGHIJKLMNOPQRSTUVWXYZ 19 27 ABCDEFGHIJKLMNOPQRSTUVWXYZ
파일전체를 한번에 읽어서 처리하면 별문제가 없지만 파일크기가 커서 그렇게 할 수 없는 상황입니다.
XP SP3 , python 2.5.4 / 2.6.2 와 데비안, python 2.5.4 에서 동일증상입니다.
이 문제를 회피할 수 있는 방법이 있을까요?
Forums:
댓글 달기