0
我正在嘗試使用配置解析器來跟蹤需要在程序之間傳遞的一些變量。 (我不確定這是ConfigParser的意思,但它是程序如何工作,所以我仍然在使用它。)ConfigParser正在做這個奇怪的事情,但是,在最後的文件會添加幾行空白行,然後用文本重複前一行的最後幾個字符(或者有時來自前一行的文本)。老實說,如果你只是運行下面的代碼,就會更容易理解。ConfigParser無意中添加額外的行和字符
無論如何,我搜索了網頁,找不到任何提到這個問題。任何想法有什麼不對?我應該放棄並嘗試不同的圖書館嗎?
任何和所有的幫助表示讚賞,非常感謝你!
操作系統:Windows使用Python 2.7.10
代碼重現錯誤(變化<>用戶到用戶):
from ConfigParser import ConfigParser
import os
def create_batch_file(name, config_dir, platform, ABCD, batch_ID, speed, parallel, turbo=False):
## setup batch_info.ini
batch_ini = os.path.join(config_dir, "batch_info.ini")
# Cast to string in case they are none object
batch_ID = str(batch_ID).lower()
parallel = str(parallel).lower()
if parallel == "none":
parallel = 1
batch_ini_contents = ["[Machine]\n",
"name = {}\n".format(name),
"platform = {}\n".format(platform),
"\n",
"[Environment]\n",
"turbo = {}\n".format(turbo),
"speed = {}\n".format(speed),
"\n",
"[Batch]\n",
"batch_id = {}\n".format(batch_ID),
"ABCD = {}\n".format(ABCD),
"parallel = {}\n".format(parallel),
"rerun = False\n",
"\n"
"[Reservation]\n"
"reserved = False\n"
"purpose = None"
]
with open(batch_ini, 'w+') as f:
f.writelines(batch_ini_contents)
return batch_ini
def temp_getter(config_dir):
config = config_dir
fl = ConfigParser()
fl.read(config)
return fl
config_dir = "C:\\Users\\<user>\\Desktop"
batch_ini = os.path.join(config_dir, "batch_info.ini")
name = "m"
platform = "p"
turbo = False
speed = "default"
batch_ID = 5
ABCD = 'abcd'
parallel = 1
purpose = "hello hello hello"
create_batch_file(config_dir=config_dir, ABCD=ABCD, turbo=turbo,
batch_ID=batch_ID, parallel=parallel, speed=speed, name=name,
platform=platform)
f = temp_getter(batch_ini)
f.set('Reservation', 'reserved', 'True')
f.set('Reservation', 'purpose', purpose)
with open(batch_ini, 'r+') as conf:
f.write(conf)
f = temp_getter(batch_ini)
f.set('Reservation', 'reserved', 'False')
f.set('Reservation', 'purpose', 'None')
with open(batch_ini, 'r+') as conf:
f.write(conf)
由於某種原因,昨天當我使用w +時,我留下了一個空白文件,所以我切換到r +。但是你是對的,切換到w +似乎解決了這個問題。在排除故障時,我必須更換別的東西。無論如何,非常感謝!真心讚賞! – Shmuelt