[英]Replacing parts of a string simultaneously
我正在嘗試在 python 中創建一個“加密器”,通過“密鑰”文件更改字符串中的所有內容。
代碼:
alphabet = "abcdefghijklmnopqrstuvwxyz0123456789"
alphabet = list(alphabet)
cryptkey = open("cryptkey", "r")
key = cryptkey.read(36)
text = list(key)
tocrypt = open("tocrypt.txt", "r")
tocryptvar = tocrypt.read()
tocryptvar = tocryptvar.lower()
################################################ Replacement
tocryptvar = tocryptvar.replace("a", key[0]).replace("b", key[1]).replace("c", key[2]) #etc
關鍵是字母和數字打亂並放在一個文件中。 所以,我的問題是,當說,A 被替換為說 B 一切都好但隨后它改變 B 說,G,然后 A 變成了 G。就是這樣。
更好的方法是將您的密鑰設置為字典,然后通過循環替換純文本:
key = {}
key['a'] = '4' # here '4' is your replacement
plain = 'hello there'
cryptext = ''.join(key.get(i, i) for i in plain)
這是測試它的快速方法
import string
import random
letters = list(string.ascii_letters+string.digits)
random.shuffle(letters)
# This creates a random key for each letter, a simple
# substitution
key = {v:letters[i] for i,v in enumerate(string.ascii_letters+string.digits)}
plain_string = 'hello world'
cryptext = ''.join(key.get(i,i) for i in plain_string)
輸出類似於'fLXXc ocMXg'
順便說一下, string.ascii_letters
是整個字母表(包括大寫字母), string.digits
是數字 0 到 9
這應該可以解決問題:
import string as str_module
alphabet = "abcdefghijklmnopqrstuvwxyz0123456789"
key = None
with open("cryptkey", "r") as f:
key = f.read(36)
tocryptvar = None
with open("tocrypt.txt", "r") as f:
tocryptvar = f.read().lower()
trans_table = str_module.maketrans(alphabet, key)
tocryptvar = tocryptvar.translate(trans_table)
alphabet
是要使用鍵翻譯的字符串, key
是alphabet
中相應字符將被翻譯成的字符串。 string.maketrans()
創建一個從alphabet
到key
的翻譯字符串,而tocryptvar.translate(trans_table)
使用翻譯表翻譯字符串(不在alphabet
中的alphabet
保持不變)。
您可以簡單地遍歷字符串的每個字符,並用它們的替換單獨替換它們。
alphabet = list("abcdefghijklmnopqrstuvwxyz0123456789")
key = list(open("cryptkey", "r").read(36))
mapping=dict(zip(alphabet,key))
tocryptvar = open("tocrypt.txt", "r").read().lower()
cryptedval=''.join([mapping[k] for k in tocryptvar])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.