使用自定义字典将字符串加密到另一个文件有什么特别之处吗?
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.translate
和str.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)
我在 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.translate
和str.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)