我有一个 config.ini 文件,其中包含 Web 应用程序的一些默认配置(使用 VS 2017 的 Flask)
我也想自己写一些配置。
我正在使用下面的代码尝试在该[keys]部分中写入,变量是gkey:
def writeKey(key):
Config = configparser.ConfigParser()
configFile = Path("config.ini")
if configFile.is_file() == False:
cfgfile = open("config.ini",'w')
else:
cfgfile = open("config.ini")
# add the settings to the structure of the file, and lets write it out...
Config.add_section('keys')
Config.set('gkey','key',True)
Config.write(cfgfile)
cfgfile.close()
gkey = encrypt(key)
writeKey(gkey)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Traceback (most recent call last):
File "C:\Users\blivo\documents\visual studio 2017\Projects\blivori2\blivori2\blivori2\functions\common.py", line 59, in <module>
writeKey(gkey)
File "C:\Users\blivo\documents\visual studio 2017\Projects\blivori2\blivori2\blivori2\functions\common.py", line 30, in writeKey …Run Code Online (Sandbox Code Playgroud) 我在 python 应用程序中使用 configparser
当我运行应用程序时
python main.py
Run Code Online (Sandbox Code Playgroud)
有用。但是,如果我使用 pyinstall 创建 Windows exe,该 exe 将失败并显示消息
no module named 'configparser'
Run Code Online (Sandbox Code Playgroud)
然而,如屏幕截图所示,configparser 确实存在
这里发生了什么?
注意:如果从目录中删除 __init__.py,我不会收到错误
[更多信息]
这似乎是“sys.path”问题。如果我将 configparser.py 复制到我的应用程序目录中,问题就会转移到我正在调用的另一个模块上
我应该更改我的 pyinstaller 规范文件吗?
# -*- mode: python -*-
a = Analysis(['main.py'],
hiddenimports=[],
hookspath=None,
runtime_hooks=None)
a.datas = list({tuple(map(str.upper, t)) for t in a.datas})
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='test_imports.exe',
debug=False,
strip=None,
upx=True,
console=True)
Run Code Online (Sandbox Code Playgroud) 我喜欢在Python脚本中转换以下字符串:
mystring='(5,650),(235,650),(465,650),(695,650)'
Run Code Online (Sandbox Code Playgroud)
到元组列表
mytuple=[(5,650),(235,650),(465,650),(695,650)]
Run Code Online (Sandbox Code Playgroud)
这样
print mytuple[0]得到:
(5,650)
Run Code Online (Sandbox Code Playgroud) 我可以使用 python 中的 ConfigParser 模块使用 add_section 和 set 方法创建 ini 文件(参见http://docs.python.org/library/configparser.html 中的示例)。但我没有看到任何关于添加评论的内容。那可能吗?我知道使用 # 和 ; 但是如何让 ConfigParser 对象为我添加它?我在 configparser 的文档中没有看到任何关于此的内容。
我需要在运行时通过ConfigParserPython中的库生成的配置文件中写一些注释.
我想写一个完整的描述性评论,如:
########################
# FOOBAR section
# do something
########################
[foobar]
bar = 1
foo = hallo
Run Code Online (Sandbox Code Playgroud)
代码应如下所示:
我在同一时刻插入注释和配置选项的位置.
import ConfigParser
config = ConfigParser.ConfigParser()
config.insert_comment("##########################") # This function is purely hypothetical
config.insert_comment("# FOOBAR section ")
....
config.add_section('foobar')
config.set('foobar', 'bar', '1')
config.set('foobar', 'foo', 'hallo')
Run Code Online (Sandbox Code Playgroud) 我正在使用一个文件,我有一个名为DIR的部分,其中包含路径.EX:
[DIR]
DirTo=D:\Ashish\Jab Tak hai Jaan
DirBackup = D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\Backup
ErrorDir = D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\Error
CombinerDir = D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\Combiner
DirFrom=D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\In
PidFileDIR = D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\Pid
LogDir = D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\Log
TempDir = D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\Temp
Run Code Online (Sandbox Code Playgroud)
现在我想要替换我已经完成它的路径,但是当我替换它在新写入的.ini文件中的分隔符之前和之前给我空格.例如:DirTo = D:\Parser\Backup.我如何删除这些空格?
码:
def changeINIfile():
config=ConfigParser.RawConfigParser(allow_no_value=False)
config.optionxform=lambda option: option
cfgfile=open(r"D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\Windows\opx_PAR_GEN_660_ERICSSON_CSCORE_STANDARD_PM_VMS_MALAYSIA.ini","w")
config.set('DIR','DirTo','D:\Ashish\Jab Tak hai Jaan')
config.optionxform=str
config.write(cfgfile)
cfgfile.close()
Run Code Online (Sandbox Code Playgroud) 我试图使用python 3.6或python 3.5.1中标准库中的configparser模块
我的ini文件看起来像这样:
[common]
domain = http://some_domain_name:8888
about = about/
loginPath = /accounts/login/?next=/home
fileBrowserLink = /filebrowser
partNewDirName = some_dir
[HUE_310]
partNewFilePath = ${common:domain}
Run Code Online (Sandbox Code Playgroud)
我的“主”程序如下所示:
from configparser import ConfigParser
parser = ConfigParser()
parser.read('configfile.ini')
lll = parser.get('HUE_310', 'partNewFilePath')
print(lll)
Run Code Online (Sandbox Code Playgroud)
相反,http://some_domain_name:8888我得到了${common:domain}
我将Pycharm社区用作我的IDE。我使用virtualenv。
我不知道我的代码有什么问题...
当我尝试使用 configparser.read 读取不存在的文件时,我认为它应该引发异常。它没有。它返回一个空列表。显然,我可以测试一个空列表并引发异常。如果 configparser.read 引发 FileNotFound 异常,在我看来它更直观和更安全。
jeffs@jeffs-laptop:~/nbmdt (blue-sky)*$ python3.6
Python 3.6.2 (default, Oct 2 2017, 16:51:32) [GCC 7.2.1 20170915 (Red Hat 7.2.1-2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import configparser
>>> config=configparser.ConfigParser()
>>> config.read("xyzzy.xyz")
[]
>>> config.read("nbmdt.ini")
['nbmdt.ini']
>>>
Run Code Online (Sandbox Code Playgroud)
谢谢
如果配置文件中未定义默认值,那么使用默认值的最佳方法是什么?例如,在下面的示例中,可能仅listen_address在配置中定义,并且listen_port不存在。
我正在尝试这样的事情:
import ConfigParser
from os.path import isfile
if __name__ == "__main__":
# Set default values
listen_address = '127.0.0.1'
listen_port = 8000
# Check for configurations from file and override defaults
configFile = './configuration.ini'
if isfile(configFile):
configs = ConfigParser.ConfigParser()
configs.read(configFile)
try:
listen_address = configs.get('ServerConfigs', 'listen_address')
except:
pass
try:
listen_port = configs.get('ServerConfigs', 'listen_port')
except:
pass
Run Code Online (Sandbox Code Playgroud)
但这感觉很丑。
随机出现此错误,有时会出现,有时不会:
for i in range(1,32):
sezione = "GRP"+str(i)
dizionarioGRP = dict(config.items(sezione))
print int(dizionarioGRP['r'])
Run Code Online (Sandbox Code Playgroud)
这是错误
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/home/pi/gigi.py", line 436, in run
self.esegui()
File "/home/pi/gigi.py", line 307, in esegui
L.gruppo(idgruppo)
File "/home/pi/gigi1.py", line 282, in gruppo
dizionarioGRP = dict(config.items(sezione))
File "/usr/lib/python2.7/ConfigParser.py", line 655, in items
for option in options]
File "/usr/lib/python2.7/ConfigParser.py", line 663, in _interpolate
if value and "%(" in value:
TypeError: argument of type 'int' is not iterable
Run Code Online (Sandbox Code Playgroud)
为什么它引用为int,如果我将它转换为字符串?
configparser ×10
python ×10
python-3.x ×2
comments ×1
config ×1
default ×1
flask ×1
pyinstaller ×1
python-2.7 ×1