使用ConfigParser来读取配置文件,经常会发现经过记事本、notepad++修改后的配置文件读取时出现下面的问题:
ConfigParser.MissingSectionHeaderError: File contains no section headers.
file: ../conf/mal_crawler_allcids.conf, line: 1
'\xef\xbb\xbf[basic_config]\r\n'
调试程序后发现文件头部被追加了信息:\xef\xbb\xbf,然后ConfigParser解析出错
google了下\xef\xbb\xbf,原因:在window下面用记事本、notepad等编辑文件的时候,如果保存为UNICODE或UTF-8,分别会在文件的开头加上两个字节“\xFF\xFE”和三个字节“\xEF\xBB\xBF”。 即:BOM
https://www.cnblogs.com/DjangoBlog/p/3585945.html
config.read(config_file_path, encoding='utf-8-sig')
- "utf-8-sig" for UTF-8 with BOM
- "utf-8" for UTF-8 without BOM
-
ConfigParser parse UTF-8 file with BOM(xef xbb xbf)
u = open("setting.ini").read().decode("utf-8-sig").encode("utf-8") fp = tempfile.TemporaryFile() fp.write(u) fp.seek(0) conf = ConfigParser.ConfigParser() conf.readfp(fp)
其中还有"//" 作为注释的,需要自己查找“;”的位置,照样添加。
保存后小写的问题,找到lower的地方去掉。