使用自定义字典将字符串加密到另一个文件有什么特别之处吗?

Is there something special to encrypting a string into another file using a custom dictionary?

我在 Python 中制作了一个自定义词典,将字母表(大写和小写)更改为符号和数字。我正在尝试将一个文本文件的内容复制到另一个文本文件,但在自定义词典中对其进行加密。例如,如果文件显示“Hello World”,则它被复制到的另一个文件应该显示“%?;;2 !2(;”。我尝试了很多东西,但它要么给我一个错误,要么给我另一个文件保持空白

下面是代码

fileData = open('EXAMPLE.txt', 'r')
f = open('ENCODE.txt', 'w')

for x in fileData:
    encrypt = code.get(x, '')
    f.write(encrypt)

fileData 是正在读取/复制的文件。代码是字典名称。然后我尝试从键中获取值,或者如果它是数字/白色 space,它将只是默认值。但是,它总是空白。我试过导入 json 但我也无法用字典加密它。

EXAMPLE.txt 有文字

the quick brown fox jumps over the lazy dog
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG

ENCODE.txt 为空白,因为文本将被复制并编码

下面的字典

code = {'A':'1',
         'a':'@',
         'B':'!',
         'b':'#',
         'C':'3',
         'c':'$',
         'D':'4',
         'd':'^',
         'E':'<',
         'e':'?',
         'F':'>',
         'f':',',
         'G':'5',
         'g':'/',
         'H':'%',
         'h':']',
         'I':'[',
         'i':'£',
         'J':'|',
         'j':'*',
         'K':'-',
         'k':'+',
         'L':'8',
         'l':')',
         'M':'9',
         'm':'(',
         'N':'&',
         'n':'7',
         'O':';',
         'o':'`',
         'P':'0',
         'p':'_',
         'Q':'"',
         'q':'~',
         'R':'.',
         'r':'2',
         'S':'6',
         's':'8',
         'T':'7',
         't':'=',
         'U':'[',
         'u':'>',
         'V':'{',
         'v':';',
         'W':'}',
         'w':':',
         'X':'é',
         'x':'¡',
         'Y':'»',
         'y':'¤',
         'Z':'§',
         'z':'µ'}

for x in fileData: 迭代 文本。你需要像下面这样的东西来一次读取一个字符:

while (x := fileData.read(1)):

但是还有str.translatestr.maketrans是string的built-in方法,可以生成查找表并进行翻译,所以可以高效的读取整个文件并进行翻译:

Python 3.10 例子:

xlat = str.maketrans('AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz',
                     '1@!#3^<?>,5/%][£|*-+8)9(&7;`0_"~.2687=[>{;}:é¡»¤§µ')

with (open('EXAMPLE.txt', 'r') as fileData,
      open('ENCODE.txt', 'w') as f):

    encrypt = fileData.read().translate(xlat)
    f.write(encrypt)