Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 试图将外部文件读入词典_Python_Syntax - Fatal编程技术网

Python 试图将外部文件读入词典

Python 试图将外部文件读入词典,python,syntax,Python,Syntax,好的,我正在尝试将外部文件读入字典,但是我收到一些语法错误。读入的线索必须替换它们在编码单词列表中配对的字母 我读入字典并替换符号的代码如下 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_s

好的,我正在尝试将外部文件读入字典,但是我收到一些语法错误。读入的线索必须替换它们在编码单词列表中配对的字母

我读入字典并替换符号的代码如下

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_符号的代码。然而,在最后一行的print键之后,我得到了一个语法错误。代码如下所示

#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

假设
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()

中,代码中还有一些其他问题,但由于您询问的是语法错误,几乎可以肯定是这一行:

print key, value // This will print the symbols and letters
首先,
/
在Python中不是“comment”的意思,而是“整数除法”。因此,您要求它将
除以
(这可能会引发
名称错误
,因为您的代码中不太可能有任何名称为
),然后包含一组以
开头的其他标识符将
。一行中包含两个标识符的字符串的语法无效

如何用Python编写注释?使用
#
,而不是
/

print key, value # This will print the symbols and letters
其次,如果您使用的是Python3.x,
print
与其他任何函数一样,是一个普通函数,因此它的参数必须放在括号中,就像所有其他函数调用一样。(鉴于
print
调用了几行代码,我敢打赌您使用的是Python3.x。)很可能您是从Python2.x的一些代码中复制的。Python2和Python3之间有一些重要的区别,这意味着并非Python2的所有代码都可以复制并粘贴到Python3中。这是其中一个不起作用的例子。因此:

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

但是如果您使用的是Python2.x,则不要进行第二次更改;否则,您将只打印一个元组,而不是用空格分隔的两个字符串。(例如,
Print1,2
打印
12
,但是
print(1,2)
打印
(1,2)

,除了其他帖子中提到的问题外:

  • print
    vs
    print()
    (取决于python版本)
  • 使用
    进行评论(
    /
    而不是评论)
您的代码正在执行以下操作:

for line in f:
    (key,val) = line[1], line[0]
这意味着
是每一行。假设一行只是一个新行,没有其他文本。然后,在尝试读取
行[1]
时,您将得到一个
索引器

此外,这可能是一个设计问题。当您阅读
行[1]
行[0]
时,实际上您只是在阅读行中的第一个和第二个字符,这可能不是您想要做的


正如@abarnert所指出的,您最初的
SyntaxError
可能来自他提到的两点。使用@jazdev时得到的
索引器
试着阅读完整的错误消息(全部),它通常会准确地告诉你问题所在-试着想想为什么这部分可能是语法错误。此外,如果你想得到某个特定错误的帮助,你必须发布完整的错误消息,而不仅仅是模糊地描述它。错误(或其他输出)是您的代码的一部分,而不仅仅是代码。另外,您使用的是什么版本的Python?您混合了Python3的
print
函数和Python2的
print
语句。如果您使用的是Python3,则后者将是一个
SyntaxError
。如果您使用的是Python 2,它们都可以工作,但是函数样式可能会在各种情况下产生意外的结果(例如,
print(1,2)
将打印元组
(1,2)
,而不是打印
12
)。请不要先发布重复的问题,您已经被警告过这一点…替换线索如何?告诉我您得到的确切错误。对于fw_行,fs_行in(fw,fs):ValueError:太多值无法解包(预期为2)提供更多上下文。什么是fw,fs?下一步是什么?顺便说一句,你的语法是错误的。对不起,错误,我得到的错误是。。。(key,val)=填充[1],填充[0]索引器:列表索引超出范围