如何阻止Python 2.7 RawConfigParser在选项卡上抛出ParsingError?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (35)

我写兼容的封装,既Python 2.7.13Python 3.3,并使用下列内容:

try:
    import configparser
except:
    from six.moves import configparser

但是当我加载我的.gitmodules文件时Python 2.7

    configParser   = configparser.RawConfigParser( allow_no_value=True )
    configFilePath = os.path.join( current_directory, '.gitmodules' )

    configParser.read( configFilePath )

它抛出错误:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "update.py", line 122, in run
    self.create_backstroke_pulls()
  File "update.py", line 132, in create_backstroke_pulls
    configParser.read( configFilePath )
  File "/usr/lib/python2.7/ConfigParser.py", line 305, in read
    self._read(fp, filename)
  File "/usr/lib/python2.7/ConfigParser.py", line 546, in _read
    raise e
ParsingError: File contains parsing errors: /cygdrive/d/.gitmodules
        [line  2]: '\tpath = .versioning\n'
        [line  3]: '\turl = https://github.com/user/repo\n'

但是,如果我从.gitmodules文件中删除选项卡,它可以正常工作。在Python 3.3它与标签的工作,只有在Python 2.7.13它不使用标签。如何在不删除标签的情况下使其工作?

git当我添加新的子模块时,选项卡是原生的,所以我绝对不会从原始文件中删除它们。我一直在想我可以复制文件,同时删除标签。但与兼容性的运营成本是否较低Python

相关问题:

  1. 如何从配置文件中删除白色字符?
提问于
用户回答回答于

解决方法是使用io.StringIO带有修改内容的a 传递给readfp(接受文件句柄而不是文件名)。

下面的代码试图遵循Python 2和Python 3(即使在python 3中,readfp也不推荐使用,现在它也是如此read_file。无论如何它仍然可以工作)。请注意,我不需要six包,configparser本身存在于2和3个python版本中。

try:
    import ConfigParser as configparser
except ImportError:
    import configparser

import io
try:
    unicode
except NameError:
    unicode = str  # python 3: no more unicode

r = configparser.RawConfigParser()

with open(configFilePath) as f:
    fakefile = io.StringIO(unicode(f.read().replace("\t","")))

r.readfp(fakefile,filename=configFilePath)

因此,通过使用filecontents减去选项卡来读取伪文件,解析器被“欺骗”。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励