2016-04-06 5 views
0

私のコードではこの問題を説明するためにいくつかのコードを書いていますが、基本的には関数内で比較するために何をしようとしていますか - 文字列&その文字列。Pythonは2つの同じ文字列を返して偽で返します。

次のように私がリストを持っている:

私は呼び出して、ファイル名(の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 

で機能するように渡している

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

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

を比較したときにことを見てきたいくつかのプリントを追加した後

... 
CurrentTaskParams.general_static = { 
    'is_enable'   :   'true' 
} 
CurrentTaskParams.host_general_static = { 
    'is_enable'   :   'true' 
} 
... 

この文字列を含む(空白からストライピングした後)& '{' & '=') 辞書文字列を追加しないでください。 'if'がfalseを返す)

何か助けがよければ、 ありがとう!

+0

最小限の例とより簡潔な質問をすれば、答えを得るのが簡単です。 – Francesco

+0

'' if taskName == dic_name or recordLines: '' recordLines'が常に 'False'のときの目的は何ですか? – mfitzp

+1

あなたのスクリプトにも 'org_tasks'リストの文字列の最後にスペースがありますか、この投稿の間違いですか?あなたはファイルの行からすべてのスペースを削除しているので、それを削除する必要があります – Francesco

答えて

0

次最小限の例では、ソース・データとあなたのコードブロック複製:

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

実施例ではそれが困難である:

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) 

は、それが正しく、問題の行をピックアップし、これを実行します問題(!)をデバッグしますが、これは問題が別の場所にあることを意味します。

例のコードでは、引き続きスペースが残っている組織タスクをまだ指定していますが、これは意図的ですか?

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

これは、より良いあなたの文字列内のすべての主要な/末尾のスペースを強調するのに役立ちますように私は(上記参照)あなたが一致することを信じているが、引用符で包まれたデータを印刷してみてくださいお勧めします。

+0

実際にスペースはそこにあってはいけません&それを削除した後 - 問題が解決しました! – Lev

関連する問題