2013-09-06 2 views
2

im은 python3.3과 sqlite3 데이터베이스를 사용합니다. 나는 윈도우 7에서 워드 패드로 열 수있는 커다란 텍스트 파일 270mb를 가지고있다. 다음과 같이 해당 파일텍스트 파일의 줄을 읽고 charmap 디코딩 오류가 발생했습니다

각 줄은 같습니다

용어 \의 t 번호 \ n을

내가 모든 라인을 읽고 데이터베이스에 값을 저장합니다. 내 데이터베이스에 있지만, 단지 특정 라인에 모든 데이터를 읽을 수 있었다

f = open('sorted.de.word.unigrams', "r") 
for line in f: 

    #code 

, 난 모든 라인의 아마 반을 제안 다음과 같이 내 코드 보인다. 그런 다음 메신저에 다음과 같은 오류가 발생했습니다 :

File "C:\projects\databtest.py", line 18, in <module> 
for line in f: 
File "c:\python33\lib\encodings\cp1252.py", line 23, in decode 
return codecs.charmap_decode(input,self.errors,decoding_table)[0] 
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 140: character maps to <undefined> 

나는 encoding = utf-8로 파일을 열려고했지만 다른 코덱에서도 효과가 없었습니다. 그런 다음 UTF-8 txt 파일로 저장하여 워드 패드로 복사본을 만들려고했습니다. 그러나 워드 패드가 추락했습니다.

여기서 문제는 파이썬이 처리 할 수없는 문자가있는 것처럼 보입니다. 내 파일을 완전히 읽으려면 어떻게해야합니까? 또는 아마도 이러한 오류 메시지를 무시하고 그냥 다음 줄로 계속 진행할 수 있습니까?

당신은 여기에 압축 된 파일을 다운로드 할 수 있습니다 :

http://wacky.sslmit.unibo.it/lib/exe/fetch.php?media=frequency_lists:sorted.de.word.unigrams.7z

감사 alot을!

+0

직접 파이썬없이 sqlite3를로 파일을 가져올 수있는 인코딩을 지정하려고 아무것도 의미하지 않는다. – elyase

+0

지금 SQLite Database Browser를 사용해 보려는 순간 ... 나이가 들지만 좋은 해결책은 데이터베이스에 값을 쓰기 전에 파이썬으로 결정해야하는 숫자에 숫자를 추가해야하기 때문입니다. 그래서 저는 여전히 파이썬을 통해 또 다른 해결책을 찾고 있습니다. – zwieback86

+0

참조 http://stackoverflow.com/a/9233174/14420,'encoding = ...'으로 열어야합니다. –

답변

1

당신이 오류를 무시하려는 경우, 당신은 내가 파일을 확인

try: 
    # Your code that enter data to database 
except UnicodeDecodeError: 
    pass 
5

할 수 있고, 문제의 뿌리는 파일에서 단어를 포함 될 것으로 보인다

data = [] 
import codecs 
with codecs.open('sorted.de.word.unigrams', 'r') as f: 
    for line in f: 
     data.append(line) 

시도 적어도 두 가지 인코딩 : 아마 cp1252 및 cp850. 문자 0x81은 cp850에서는 ü이지만 cp1252에서는 정의되지 않았습니다. 예외를 잡아 냄으로써이 상황을 처리 할 수 ​​있지만 다른 일부 독일어 문자는 cp1252의 유효하지만 잘못된 문자에 매핑됩니다. 당신이 그런 불완전한 솔루션에 만족하는 경우, 여기 당신이 그것을 할 수있는 방법은 다음과 같습니다 encoding 불일치가있을 때이 일반적으로 발생

with open('sorted.de.word.unigrams','rb') as f: #open in binary mode 
    for line in f: 
     for cp in ('cp1252', 'cp850'): 
      try: 
       s = line.decode(cp) 
      except UnicodeDecodeError: 
       pass 
      else: 
       store_to_db(s) 
       break 
0

합니다.

0x81

file = open(filename, encoding="utf8") 
관련 문제