ConfigParser是Python自带的读取配置文件的一个库,在Linux下,没问题,但放到windows上并用记事本修改了配置文件后,再运行就报错了:
google了下原因:在window下面用记事本编辑文件的时候,如果保存为UNICODE或UTF-8,分别会在文件的开头加上两个字节“\xff\xfe”和三个字节“\xef\xbb\xbf”。
解决方法有两种:
1、用ConfigParser读取之前先全局替换,python2和python3都适用
content = open('Config.ini').read()
#Window下用记事本打开配置文件并修改保存后,编码为UNICODE或UTF-8的文件的文件头
#会被相应的加上\xff\xfe(\xff\xfe)或\xef\xbb\xbf,然后再传递给ConfigParser解析的时候会出错
#,因此解析之前,先替换掉
content = re.sub(r"\xfe\xff","", content)
content = re.sub(r"\xff\xfe","", content)
content = re.sub(r"\xef\xbb\xbf","", content)
open('Config.ini', 'w').write(content)
2、如果用的是Python3,那还有个更简单的方法,把encoding=utf-8 改为 encoding= utf-8-sig即可。由于python2的configparser的read方法没有encoding参数,所以无法使用这个方法。
import ConfigParser as cfps
cf = cfps.ConfigParser()
cf.read('Config.ini', encoding='utf-8-sig')