Python:如何忽略#以使该行不是注释



我在使用配置文件时遇到了问题,因为该选项以#开头,因此python将其视为注释(就像它应该的那样)。

配置文件中不工作的部分:

[channels]
#channel

您可以看到,这是一个IRC频道,这就是为什么它需要#。现在我可以使用一些丑陋的方法在每次需要的时候添加#,但我更喜欢保持它的干净。

那么有没有办法忽略这个呢?所以当我要打印选项时,它会以

开头

如果你在python文件中设置了这个,你可以用

转义#

否则,我认为应该在配置文件中使用其他语法,不将#视为注释行

您可能正在使用ConfigParser -您应该顺便提一下-那么您必须在将其提供给解析器之前对配置文件进行预处理/后处理,因为ConfigParser会忽略注释部分。

我可以想到两种方法,它们都使用readfp,而不是configparser类的read方法:1)从编解码器模块中继承StreamWriter和StreamReader,并使用它们将打开过程包装在透明的重新编码中。2)使用io模块中的StringIO,如:

from io import StringIO
...
s = configfile.read()
s.replace("#","_")
f = StringIO(unicode(s))
configparser.readfp(f)

如果您不需要使用"ini"文件语法,请查看json模块。对于配置,我更经常使用它,而不是ini-file,特别是当配置文件不应该由简单的用户手动编辑时。

my_config={
  "channels":["#mychannel", "#yourchannel"],
  "user"="bob",
  "buddy-list":["alice","eve"],
  }
import json
with open(configfile, 'rw') as cfg:
  cfg.write(json.dumps(my_config))

ConfigParser没有办法不忽略以'#'开头的行。

ConfigParser.py, 476行:

        # comment or blank line?
        if line.strip() == '' or line[0] in '#;':
            continue

无法关闭

在你的辩护中,ConfigParser让你犯了这个错误:

import sys
import ConfigParser
config = ConfigParser.RawConfigParser()
config.add_section('channels')
config.set('channels', '#channel', 'true')
config.write(sys.stdout)

产生如下输出:

[channels]
#channel = true

然而,你可以给以#开头的section名,像这样:

import sys
import ConfigParser
config = ConfigParser.RawConfigParser()
config.add_section('#channels')
config.set('#channels', 'channel', 'true')
config.write(sys.stdout)
with open('q15123871.cfg', 'wb') as configfile:
    config.write(configfile)
config = ConfigParser.RawConfigParser()
config.read('q15123871.cfg')
print config.get('#channels', 'channel')

生成输出:

[#channels]
channel = true
true

相关内容

  • 没有找到相关文章

最新更新