2016-04-06 62 views
0

我会把我的一些代码咆哮来解释这个问题,但基本上我正在尝试做一个函数内比较 - 一个字符串&只包含一行那个字符串。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)

任何帮助将很大, 谢谢!

+0

通过一个简单的例子和​​一个更简洁的问题,更容易得到答案。我建议你编辑一个简单的问题 – Francesco

+0

当'recordLines'总是'False'时,if taskName == dic_name或recordLines:'的目的是什么? – mfitzp

+1

'org_tasks'列表字符串末尾的空格是否也存在于您的脚本中,或仅仅是这篇文章中的错误?你应该删除它,因为你是从文件的行中删除所有的空间 – Francesco

回答

0

下面的小例子,复制源数据和您的代码块:

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 

随着工作的例子也很难调试问题(!),但我怀疑这意味着问题在别的地方。

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

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

我建议你尝试打印您认为是匹配的,但包裹在引号(见上文),因为这将有助于更好地突出任何前/后间隔在你的字符串中的数据。

+0

实际上空间不应该在那里,&删除后 - 解决问题! – Lev