如何停止 Python 2.7 RawConfigParser 在选项卡上抛出 ParsingError?
How to stop Python 2.7 RawConfigParser throwing ParsingError on tabs?
我正在编写一个与 Python 2.7.13
和 Python 3.3
兼容的包,并使用以下内容:
try:
import configparser
except:
from six.moves import configparser
但是当我在 Python 2.7
上加载我的 .gitmodules
文件时:
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
的兼容性是否有成本更低的操作?
相关问题:
- How can I remove the white characters from configuration file?
解决方法是使用 io.StringIO
,修改内容,传递给 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)
因此解析器 "fooled" 通过读取文件内容减去制表符的假文件。
我正在编写一个与 Python 2.7.13
和 Python 3.3
兼容的包,并使用以下内容:
try:
import configparser
except:
from six.moves import configparser
但是当我在 Python 2.7
上加载我的 .gitmodules
文件时:
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
的兼容性是否有成本更低的操作?
相关问题:
- How can I remove the white characters from configuration file?
解决方法是使用 io.StringIO
,修改内容,传递给 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)
因此解析器 "fooled" 通过读取文件内容减去制表符的假文件。