在配置文件中为同一键分配多个值
我正在尝试创建一个配置文件,并需要使用Python的ConfigParser模块来解析它。
比如我在一个文件config.sr
中有以下设置:
[basic]
basic=bz2,calendar,Core,ctype,curl,date,dom,ereg,exif,fileinfo,filter,ftp,gd,gettext,gmp,mhash,mysql,mysqli,openssl,pcntl,pcre,PDO,pdo_mysql,pdo_sqlite,Phar,readline
[advance]
advance=Reflection,session,shmop,SimpleXML,sockets,SPL,sqlite3,standard,tokenizer,wddx,xdebug,xml,xmlreader,xmlwriter,xsl,zip,zlib,Xdebug
从上面的内容可以看出,有很多值(29)
用逗号分隔,并且都分配给一个叫basic
的键。使用ConfigParser
模块解析这些内容时,一切都运行得很好,但这些值太长了,不方便写。
当我尝试把它们分成多行时,出现了一些错误。而且,逗号分隔的值还会增加到50个,这让我在移动光标时变得很麻烦,阅读起来也不太方便。
最后,我想知道的是,如何在配置中将与一个键相关的值分成多行来声明呢?
示例格式
[basic]
basic=bz2,calendar,Core,ctype,curl,date,dom,ereg,exif,fileinfo,filter,ftp,gd,gettext,gmp,
hash,iconv,json,libxml,mbstring,mcrypt,mhash,mysql,mysqli,openssl,pcntl,pcre,PDO,pdo_mysql,
pdo_sqlite,Phar,readline
.............
1 个回答
2
把它们缩进:
[basic]
basic:
bz2
calendar
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gd
gettext
gmp
mhash
mysql
mysqli
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
readline
这样,ConfigParser 就会有一个列表,你可以随意处理这个列表。
config = ConfigParser.ConfigParser()
config.read('config.sr')
basic_list = config.get('basic', 'basic').split('\n')
补充:
按照下面的方式运行代码:
我的 config.sr
文件:
[basic]
basic:
bz2
calendar
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gd
gettext
gmp
mhash
mysql
mysqli
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
readline
[advanced]
advanced:
a
b
c
d
e
还有我的 Python 文件: q_14934291.py
:
import ConfigParser
config = ConfigParser.ConfigParser()
config.read('config.sr')
basic_list = config.get('basic', 'basic').split('\n')
print('Basic list:')
print(basic_list)
advanced_list = config.get('advanced', 'advanced').split('\n')
print('\n\nAdvanced list:')
print(advanced_list)
运行后的输出:
Basic list:
['', 'bz2', 'calendar', 'Core', 'ctype', 'curl', 'date', 'dom', 'ereg', 'exif', 'fileinfo', 'filter', 'ftp', 'gd', 'gettext', 'gmp', 'mhash', 'mysql', 'mysqli', 'openssl', 'pcntl', 'pcre', 'PDO', 'pdo_mysql', 'pdo_sqlite', 'Phar', 'readline']
Advanced list:
['', 'a', 'b', 'c', 'd', 'e']
确保你使用正确的缩进(4个空格)。如果缩进不对,会导致错误。
另外,你需要在输入上使用 .split('\n')
。抱歉,我忘了提这个部分。
如果你不想在开头有空行,也要对输入使用 strip
:
basic_list = config.get('basic', 'basic').strip().split('\n')