在python中读取和写入文件,将文本转换为另一个文件

时间:2015-12-11 20:33:46

标签: python

我打开2个文件并阅读它们。我有一个辅助函数,可以创建一个随机的31个字符串的字母+“,';。?”

例如,该函数可以创建“seokgxavu?'bq,cr.ihwt; yjzmdfpnl”这一行,它包含所有31个字符并且是随机顺序,辅助函数创建其中2行并将它们写入secret.txt

所以说两条随机的秘密行是:

seokgxavu?'bq,cr.ihwt;yjzmdfpnl    
dcurmk'ltbgjyfan?;ohzieps,vxwq.

对于english.txt中的每个字母,每个字母都应该有自己对应的secret.txt字母。每当它写一封信,它就会从另一条秘密行中获得下一封信。例如,“Hello”将输出“vmbja”

v因为“h”是它在第一个秘密线中的位置 因为“e”是它在第二条秘密线中的位置 b因为“l”是第一个秘密线的位置(注意它是如何回到第一个,这应该继续。)

with open("english.txt", 'r') as e:
    PlainText = e.read()
with open("secret.txt", 'r') as s:
    SharedKeys = s.read()    


with open("code.txt", 'w') as c:

    x = english[0]               
    y = secret[0]
    x = y



    code.write(str(x))    

上面的代码会将english.txt中的第一个字母与secret.txt中的第一个字母匹配,然后将其写入code.txt。但是,我不确定如何重复这一点,以便它将为整段文本做到这一点。任何提示或指示表示赞赏!感谢。

2 个答案:

答案 0 :(得分:2)

我得到了“你好”的“vmbjc”...我认为这就是你的意思,因为当你替换秘密线时,你会在第一个秘密线中找到“o”位置,它有一个“c” 。第二个秘密在那个位置上有“a”。

english = "abcdefghijklmnopqrstuvwxyz" + ",';.?"
secret = []
with open("secrets.txt" , "r") as s:
    secret = [line.rstrip() for line in s]

cypher = dict((c, [x[i] for x in secret]) for i, c in enumerate(english))

def translate(s):
    secret_index = 0
    trans = []
    for c in s:
        # not sure how spaces are dealt with
        trans.append(cypher[c][secret_index] if not c == ' ' else ' ')
        secret_index = (secret_index + 1) % len(secret)
    return ''.join(trans)

print(translate("hello")) # vmbjc

更新:扩展cypher作业

cypher = {}
for i in range(len(english)): # for each english character
    c = english[i]
    secrets = []
    for j in range(len(secret)): # for each corresponding secret character
        secrets.append(secret[j][i])
        cypher[c] = secrets # make a mapping of english character to list-of-secret-characters
    secrets = [] # clear out list of secret characters for the next english character

答案 1 :(得分:0)

使用字典从代码翻译怎么样?你可以这样做:

e='abcdefghi' #etc.
s='seokgxavu'
s_to_e={}#depending on which you need
e_to_s={}
for i in range(len(e)):#assuming s and e have same length 
    s_to_e[s[i]]=e[i]
    e_to_s[e[i]]=s[i]
code_str='seo'
decoded=''
plain_str='hifi'
encoded=''
for i in range(len(code_str)):
    decoded+=s_to_e[code_str[i]]
for i in range(len(plain_str)):
    encoded+=e_to_s[plain_str[i]]
#encoded should now be 'vuxu' and decoded 'abc'

您还必须映射空格(换行符,空格等)以执行段落或更多段落,执行以下操作:

s_to_e[' ']=' '。 或者将s='cdfa 'e='abcd '

直接添加到英语和秘密中