2014-09-28 34 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