Python 将两个相同的字符串 returns 与 false 进行比较
Python comparing two same string returns with false
我会在下面放一些我的代码来解释这个问题,但基本上我想做的是在一个函数内进行比较——一个字符串和一个只包含该字符串的行。
我有如下列表:
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' returns false)
任何帮助都会很棒,
谢谢!
以下最小示例复制了您的源数据和代码块:
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)
运行 它正确地选择了有问题的行:
'' '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
使用一个工作示例很难调试问题(!),但我怀疑这意味着问题出在其他地方。
在您的示例代码中,您列出了尾随 space 的组织任务,这是故意的吗?
org_tasks = ['general_static ', 'host_general_static ',etc....]
我建议您尝试打印您认为匹配但用引号括起来的数据(见上文),因为这将有助于更好地突出显示字符串中的任何 leading/trailing space。
我会在下面放一些我的代码来解释这个问题,但基本上我想做的是在一个函数内进行比较——一个字符串和一个只包含该字符串的行。
我有如下列表:
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' returns false)
任何帮助都会很棒, 谢谢!
以下最小示例复制了您的源数据和代码块:
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)
运行 它正确地选择了有问题的行:
'' '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
使用一个工作示例很难调试问题(!),但我怀疑这意味着问题出在其他地方。
在您的示例代码中,您列出了尾随 space 的组织任务,这是故意的吗?
org_tasks = ['general_static ', 'host_general_static ',etc....]
我建议您尝试打印您认为匹配但用引号括起来的数据(见上文),因为这将有助于更好地突出显示字符串中的任何 leading/trailing space。