我會把我的一些代碼咆哮來解釋這個問題,但基本上我正在嘗試做一個函數內比較 - 一個字符串&只包含一行那個字符串。Python比較兩個相同的字符串返回與假
我有名單如下:
org_tasks = ['general_static ', 'host_general_static ',etc....]
這我傳遞一個文件名功能(Python文件)
my_dict = createDictFromTaskList(ref_ver, org_tasks)
def createDictFromTaskList(prm_fl,tasks_list):
final_dict = {}
for task in tasks_list:
print getTransformedDic(prm_fl, str('CurrentTaskParams.' + task))
return final_dict
的呼叫:
def getTransformedDic(prm_fl,dic_name): # transforms string to dictionary
"turns dictionary values from type variable into a string"
newDic = ""
dicToChange = getOldDicAsString(prm_fl,dic_name)
if dicToChange is None: return None
dicToChange = dicToChange[len(dic_name) + 3:] #here i get none for some reason
dicToChange = dicToChange.replace('"', "'")
for line in dicToChange.splitlines():
transformedLine = ''.join(line.split())
transformedLine = transformedLine.strip()
if transformedLine.startswith('#'): continue
IsLineBelongsToDic = transformedLine.split(':')
if len(IsLineBelongsToDic) > 1:
if transformedLine[-1:] == ",":
valueAsString = '"%s",' % transformedLine[len(IsLineBelongsToDic[0]) + 1:-1]
else:
valueAsString = '"%s",' % transformedLine[len(IsLineBelongsToDic[0]) + 1:]
line = ' ' + IsLineBelongsToDic[0] + ' : ' + valueAsString
newDic += '%s' % line + '\n'
try:
value = ast.literal_eval(newDic[:-1])
except SyntaxError:
return None
else:
return value
def getOldDicAsString(prm_fl, dic_name):
"return a string that contains dictionary"
with open(prm_fl) as f:
file_data = f.read()
recordLines = False
dictionary = ""
for line in file_data.splitlines():
transformedLine = ''.join(line.split())
transformedLine = transformedLine.strip()
taskName = transformedLine.split('=')[0]
print taskName ,dic_name # here i can see they are the same
if taskName == dic_name or recordLines:
recordLines = True
dictionary += line + '\n'
if transformedLine == "}":
return dictionary
的文件我看起來如下(根據我之前提到的名單):
...
CurrentTaskParams.general_static = {
'is_enable' : 'true'
}
CurrentTaskParams.host_general_static = {
'is_enable' : 'true'
}
...
加入一些打印完畢後,我已經看到了,當例如我比較
CurrentTaskParams.general_static
- >這是作爲參數
傳遞到線包含此字符串(在從空格&'{'&'=') 條帶化後我不添加字典字符串(意思是我的'if'返回false)
任何幫助將很大, 謝謝!
通過一個簡單的例子和一個更簡潔的問題,更容易得到答案。我建議你編輯一個簡單的問題 – Francesco
當'recordLines'總是'False'時,if taskName == dic_name或recordLines:'的目的是什麼? – mfitzp
'org_tasks'列表字符串末尾的空格是否也存在於您的腳本中,或僅僅是這篇文章中的錯誤?你應該刪除它,因爲你是從文件的行中刪除所有的空間 – Francesco