Python比较两个相同的字符串返回false

Python comparing two same string returns with false

我将在下面列出一些代码来解释这个问题,但基本上我要做的是在一个函数中进行比较——一个字符串和一个只包含该字符串的行。

我有以下清单:

1
org_tasks = ['general_static ', 'host_general_static ',etc....]

传递给函数的文件名(python文件)

1
2
3
4
5
6
7
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

电话:

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
45
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 + '
'

    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)

任何帮助都很好,谢谢!


下面的最小示例复制源数据和代码块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
file_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

通过一个工作示例,很难调试问题!!)但我怀疑这意味着问题出在别的地方。

在您的示例代码中,您列出了带有尾随空格的组织任务,这是有意的吗?

1
org_tasks = ['general_static ', 'host_general_static ',etc....]

我建议您尝试打印您认为匹配但用引号括起来的数据(见上文),因为这将有助于更好地突出显示字符串中的任何前导/尾随空格。