Python 从文件中读取预定义词典,将其用作词典

Python 从文件中读取预定义词典,将其用作词典,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我目前正忙于一个项目,我需要随机创建一个字典来加密一个文件。然后反转字典的密钥和值以解密文件 我现在做的是将原始字典保存到一个文件中,然后希望能够从该文件中读取字典,通过“反向”函数运行它,从而能够解密该文件 我之所以决定采用这种方法,是因为我不想每次加密某个内容时都生成一个新字典 我目前已经编写了这段代码,它检查是否有一个保存了字典的文件。如果没有,那么我创建一个,这样就有一个: def create_random_dictionary(): key = c.create_encryption

我目前正忙于一个项目,我需要随机创建一个字典来加密一个文件。然后反转字典的密钥和值以解密文件

我现在做的是将原始字典保存到一个文件中,然后希望能够从该文件中读取字典,通过“反向”函数运行它,从而能够解密该文件

我之所以决定采用这种方法,是因为我不想每次加密某个内容时都生成一个新字典

我目前已经编写了这段代码,它检查是否有一个保存了字典的文件。如果没有,那么我创建一个,这样就有一个:

def create_random_dictionary():
key = c.create_encryption_dictionary()
if os.path.exists("encryption_key"):
   pass

else:
    with open("encryption_key", 'w') as file:
        file.write(str(key))
然后我试着去读它,以便能够使用字典。但由于在写入文件时必须将其保存为字符串,而不是字典,因此无法正确使用它进行解密或加密

是否有一种方法可以读取输入文件,然后将读取的字符串转换回字典。我试过这样的文字评估

def string_to_dictionary():
with open('encryption_key', 'r') as f:
    read_lines = f.readlines
    x = literal_eval(read_lines)

print(x) # why I'm assigning x and printing x is just to see if it works
但我得到一个类似这样的错误:

File "/usr/lib/python3.6/ast.py", line 84, in _convert
raise ValueError('malformed node or string: ' + repr(node))ValueError: malformed node or string: ['{\'0\': \'ö\', \'1\': \'z\', \'2\': \'-\' 
我主要关心的是,如何去掉多余的“\”,然后如何读回字符串并将其转换为字典


感谢您对我的帮助。

您可以加入
readlines
返回的
列表,该列表解决了我在运行类似于您的代码时遇到的问题:

with open('encryption_key', 'r') as f:
    x = literal_eval(''.join(f.readlines()))

您只需
加入
readlines
返回的
列表
,它解决了我在运行类似于您的代码时遇到的问题:

with open('encryption_key', 'r') as f:
    x = literal_eval(''.join(f.readlines()))
str()
并不总是可逆的。碰巧的是,对于dicts来说通常是这样

如果您的数据是JSON可编码的(很可能是),请改用
JSON
模块。(如果是,请不要使用
pickle
,而是注意模块文档中的警告。)

str()
并不总是可逆的。碰巧的是,对于dicts来说通常是这样

如果您的数据是JSON可编码的(很可能是),请改用
JSON
模块。(如果是,请不要使用
pickle
,而是注意模块文档中的警告。)


如果操作系统路径存在(“加密密钥”):pass
什么都不做,顺便说一句。
如果操作系统路径存在(“加密密钥”):pass
什么都不做,顺便说一句。杜德,我想这解决了问题。你真是一颗宝石。我已经苦苦思索了几个小时了。很高兴听到这个消息!:)哥们,我想这就解决了。你真是一颗宝石。我已经苦苦思索了几个小时了。很高兴听到这个消息!:)这很有效,现在我很遗憾地遇到了一个问题,我的加密和解密停止工作了,我不知道为什么不能使用字典正常运行。这很有效,现在我很遗憾地遇到了一个问题,我的加密和解密停止工作了,我不知道为什么不能使用字典正常运行。