2017-09-25 15 views
0

Python 3.1.3 내가 필요한 것은 ConfigParser를 사용하여 cp1251 파일에서 사전을 읽는 것입니다. 내 예 : 그 후ConfigParser (Python)의 인코딩

config = configparser.ConfigParser() 
config.optionxform = str 
config.read("file.cfg") 
DataStrings = config.items("DATA") 
DataBase = dict() 
for Dstr in DataStrings: 
    str1 = Dstr[0] 
    str2 = Dstr[1] 
DataBase[str1] = str2 

나는 사전에 따라 일부 UTF-8 파일에 일부 단어를 대체하기 위해 노력하고있어. 그러나 때로는 작동하지 않습니다 (예 : "새로운 라인 캐리지 리턴"이라는 기호 사용). 내 파일은 UTF-8이고 구성 파일 (사전)은 CP1251입니다. 문제가있는 것처럼 보입니다. config를 UTF-8로 디코딩해야합니다. 내가이 tryed했습니다

str1 = Dstr[0].encode('cp1251').decode('utf-8-sig') 

그러나 오류 "'utf8' codec can't decode byte 0xcf in position 0" 등장. .decode('','ignore')을 사용하면 거의 모든 설정 파일이 손실됩니다. 어떻게해야합니까?

+1

'config.read ("file.cfg", encoding = "cp1251")' – Goyo

+0

좋은 소리로 작동하지 않습니다. 벌써 시도 했어. Python3.x 이후에는 "인코딩"속성이 없습니다. 인코딩은 .open() 기본 설정에서 상속됩니다. –

+0

속성과 어떤 관계가 있습니까? 'ConfigParser.read'는 적어도 [python 3.3] (https://docs.python.org/3.3/library/configparser.html#configparser.ConfigParser.read)부터'encoding' 키워드 인자를 가지고 있습니다. 이전 버전을 사용하지 않기를 바랍니다. – Goyo

답변

2

Python 3.1은 Python 버전의 무인도에 있습니다.

import configparser 

config = configparser.ConfigParser() 
config.optionxform = str 
config_file = open("file.cfg", encoding="cp1251") 
config.readfp(config_file) 
: 이상적으로 당신은 3.1에 체류해야하는 경우, 올바른 인코딩을 사용하여 이전에 열었던 파일에서 읽을 수있는 ConfigParser.readfp() 방법을 사용할 수 있습니다 당신은 config.read("file.cfg", encoding="cp1251")

을 할 것입니다 파이썬 3.5으로 업그레이드 할 것

+0

고마워. 정말 –