簡體   English   中英

同時替換字符串的一部分

[英]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是要使用鍵翻譯的字符串, keyalphabet中相應字符將被翻譯成的字符串。 string.maketrans()創建一個從alphabetkey的翻譯字符串,而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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM