2014-09-28 30 views
-2

好的我想將外部文件讀入字典,但是我收到一些語法錯誤。然後讀入的線索必須替換它們在編碼字列表中配對的字母試圖將外部文件讀入字典

我的用於讀入字典並替換符號的代碼如下。

d = {} 
def read_clues(clues): 
    global d 
    with open("hey.txt") as f: 
     for line in f: 
      (key, val) = line[1], line[0] 
      d[key] = val 


def replace_symbols(clues, words): 
    global d 
    for word in range(len(words)): 
     for key, value in d.items(): 
      words[word] = words[word].replace(key, value) 

在我的程序的主要部分,我有調用replace_symbols的代碼。但是,在最後一行中,我在打印鍵後出現語法錯誤。代碼如下所示。

#REPLACES LETTERS 
print("======== The clues have been replaced ===========") 
replace_symbols(clues, words) 
for key, value in d.items(): 
    print key, value // This will print the symbols and letters 
+0

嘗試閱讀完整的錯誤消息(全部),它通常會告訴您確切的問題所在 - 嘗試考慮爲什麼該部分可能是語法錯誤 – 2014-09-28 21:15:16

+1

另外,如果您需要幫助有一個特定的錯誤,你必須_post_完整的錯誤信息,而不是僅僅模糊地描述它。錯誤(或其他輸出)是[最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)的一部分,而不僅僅是代碼。 – abarnert 2014-09-28 21:57:08

+0

另外,你使用的是什麼版本的Python?你在混合使用Python 3的'print'函數和Python 2的'print'語句。如果你使用Python 3,後者將是'SyntaxError'。如果你使用的是Python 2,它們都可以工作,但函數樣式可能會在各種情況下給出意想不到的結果(例如'print(1,2)'將打印元組'(1,2)'而不是打印'1 2')。 – abarnert 2014-09-28 21:58:30

回答

1

假設hey.txt具有鍵和由空間分隔值,下面的代碼應工作:

def read_clues(clues): 
    global d 
    with open("hey.txt") as f: 
     for line in f: 
      stuff = line.split(" ") #split each line into parts 
      (key, val) = stuff[1], stuff[0] 
      d[key] = val 

如果分離比空間等,只是包括它作爲一個參數到split()

+0

如何取代線索? – Paul 2014-09-28 21:31:25

+0

告訴我你得到的確切的錯誤。 – jazdev 2014-09-28 21:32:23

+0

for fw_line,fs_line in(fw,fs): ValueError:太多值解壓縮(預計2) – Paul 2014-09-28 21:37:28

0

有在你的代碼中的一些其他問題,但既然你問了語法錯誤,這是幾乎可以肯定這條線:

print key, value // This will print the symbols and letters 

首先,//並不在Python中的意思是「評論」,它意味着「整數除法」。所以,你要求它將value除以This(這可能會增加NameError,因爲它不太可能在代碼中有任何名稱爲This的東西),然後包括一系列以will開頭的其他標識符。一行中的兩個標識符串是無效的語法。

如何你用Python寫評論?使用#,不//

print key, value # This will print the symbols and letters 

其次,如果你正在使用Python 3.x中,print是一個正常的功能,象別的,所以它的參數必須在括號中去,就像所有其他的功能調用。 (考慮到print需要調用幾行代碼,我敢打賭你使用Python 3.x來打賭你)。很可能你已經從Python 2.x的一些代碼中複製了它。 Python 2和Python 3之間有一些重要的區別,這意味着並非所有Python 2的代碼都可以複製並粘貼到Python 3中。這是無法使用的其中一種情況。所以:

print(key, value) # This will print the symbols and letters 

做出第二個變化,如果你使用的是Python 2.x的;否則,你最終會打印一個元組而不是兩個由空格分隔的字符串。 (例如,print 1, 2打印1 2,但print(1, 2)打印(1, 2)。)

0
從其他職位中提到的問題

除了:

  • print VS print()(取決於Python版本)使用#
  • 評論(//評論)

您的代碼正在做:

for line in f: 
    (key,val) = line[1], line[0] 

這意味着line是每一行。假設一行只是一個沒有其他文本的換行符。然後當您嘗試閱讀line[1]時,您會收到IndexError

此外,這可能是一個設計問題。當你閱讀line[1]line[0]時,基本上你只是在閱讀行中的第一個和第二個字符,這可能不是你打算做的。

正如@abarnert指出的那樣,您的原始SyntaxError可能是由他提到的兩點引起的。您在使用@jazdev時獲得的IndexError