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