我将在下面列出一些代码来解释这个问题,但基本上我要做的是在一个函数中进行比较——一个字符串和一个只包含该字符串的行。
我有以下清单:
1org_tasks = ["general_static ", "host_general_static ",etc....]
传递给函数的文件名(python文件)
1
2
3
4
5
6
7my_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
号
电话:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45def 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 + "
"
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 + "
"
if transformedLine =="}":
return dictionary
我使用的文件如下(根据我之前提到的列表):
1
2
3
4
5
6
7
8...
CurrentTaskParams.general_static = {
"is_enable" : "true"
}
CurrentTaskParams.host_general_static = {
"is_enable" : "true"
}
...
。
加了几张照片后,我就看到了
CurrentTaskParams.general_static
号
-->作为参数传递
到包含此字符串的行(在从空格中剥离后)我不追加字典字符串(意思是我的"if"返回false)
任何帮助都很好,谢谢!
有了一个最少的例子和一个更简洁的问题,就更容易得到答案。我建议你编辑这个问题,使它更简单
当recordLines总是False时,if taskName == dic_name or recordLines:的目的是什么?
您的脚本中是否也存在org_tasks列表字符串末尾的空格,或者只是这篇文章中的一个错误?您应该删除它,因为您要删除文件行中的所有空格
下面的最小示例复制源数据和代码块:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16file_data ="""
CurrentTaskParams.general_static = {
"is_enable" : "true"
}
CurrentTaskParams.host_general_static = {
"is_enable" : "true"
}
"""
dic_name = "CurrentTaskParams.general_static"
for line in file_data.splitlines():
transformedLine = "".join(line.split())
transformedLine = transformedLine.strip()
taskName = transformedLine.split("=")[0]
print(""%s"" % taskName,""%s"" % dic_name, taskName == dic_name)
运行此命令,它将正确地拾取相关行:
1
2
3
4
5
6
7"" "CurrentTaskParams.general_static" False
"CurrentTaskParams.general_static" "CurrentTaskParams.general_static" True
""is_enable":"true"" "CurrentTaskParams.general_static" False
"}" "CurrentTaskParams.general_static" False
"CurrentTaskParams.host_general_static" "CurrentTaskParams.general_static" False
""is_enable":"true"" "CurrentTaskParams.general_static" False
"}" "CurrentTaskParams.general_static" False
号
通过一个工作示例,很难调试问题!!)但我怀疑这意味着问题出在别的地方。
在您的示例代码中,您列出了带有尾随空格的组织任务,这是有意的吗?
1org_tasks = ["general_static ", "host_general_static ",etc....]
我建议您尝试打印您认为匹配但用引号括起来的数据(见上文),因为这将有助于更好地突出显示字符串中的任何前导/尾随空格。
事实上,空间不应该存在,移除后-问题解决!