从python中的.ini文件中读取特殊字符文本

时间:2017-12-04 19:12:50

标签: python configparser

我正在运行一个带有文本的脚本" rAh%19u ^ l \& G"即包含特殊字符的内容。

当我在脚本中将此文本作为参数传递时,它运行正常,没有任何错误。

示例 - :dtMSDate = rs.Fields(1).Value

以上文字基本上是一个密码。

现在,当我将我的值放在配置文件中并阅读上述文本时,脚本失败

******* abc.ini *******

./abc.py <username><pwd>

它说

[DEFAULT]
username = rahul
pwd =  rAh%19u^l\&G

借助config parser

阅读上述值

******以下是程序abc.py ******

/bin/sh:M command not found.

我尝试了很多,但没有找到具体的东西。

所以问题是如何读取包含.ini文件中特殊字符的文本。

4 个答案:

答案 0 :(得分:7)

看起来%字符是问题所在。如果您使用ConfigParser,它具有特殊含义。如果你没有使用插值,那么只使用RawConfigParser,否则你必须通过加倍来逃避%

当我尝试使用ConfigParser的示例文件时,会出现以下异常:

InterpolationSyntaxError: '%' must be followed by '%' or '(', found: '%19u^l\\&G"'

如果我将ConfigParser替换为RawConfigParser,一切都会好的。

您发布的错误与此无关。我们甚至无法判断它是python异常还是shell错误消息。请使用完整的错误消息更新您的问题。您还可以want to check the sh module,更高级别的subprocess包装。

答案 1 :(得分:1)

您可以使用相同的字符转义特殊字符。例如,要读取%,您必须将其写入%%

答案 2 :(得分:0)

添加Paulo Scardine的评论。

如果您有特殊字符需要处理,可以将ConfigParser的{​​{1}}参数设置为interpolation,这样就不会再有错误了。 None默认将ConfigParser设置为interpolation

您可以在此处了解更多信息: https://docs.python.org/3.6/library/configparser.html#interpolation-of-values

此外,根据文档BasicInterpolation()RawConfigParser

这里是一个片段:

示例:

Legacy variant of the ConfigParser with interpolation disabled by default and unsafe add_section and set methods.

在上面的示例中,将插值设置为BasicInterpolation()的ConfigParser会将[Paths] home_dir: /Users my_dir: %(home_dir)s/lumberjack my_pictures: %(my_dir)s/Pictures 解析为%(home_dir)s的值(在这种情况下为/ Users)。 home_dir实际上将解析为%(my_dir)s。 [....]

在将插值设置为/Users/lumberjack的情况下,解析器将简单地返回None作为%(my_dir)s/Pictures的值和my_pictures作为%(home_dir)s/lumberjack的值。

答案 3 :(得分:0)

我遇到了同样的问题。可以理解,答案已经发布。根据这篇文章中每个人的评论,我通过以下方式解决了这个问题:

我的密码是 Sgf%ts54hhGtrf&yhgf

我使用的 alembic ini 文件:sqlalchemy.url = driver://myuser:Sgf%ts54hhGtrf&yhgf@localhost/my_application

收到错误:configparser.InterpolationSyntaxError: '%' must be followed by '%' or '(', 通知我特殊字符是“%”

解决了这个问题,只需将密码用单引号括起来,然后按照本文评论中的建议将 % 符号加倍,最后得到:

sqlalchemy.url = driver://myuser:'Sgf%%ts54hhGtrf&yhgf'@localhost/my_application

无需担心更改 ConfigParser,只要您坚持使用单引号将包含特殊字符的密码和在您收到的错误中发现的任何特殊字符加倍的规则来包装它,例如如果错误与 % 相关,则添加另一个并以 %%

结尾