在Python中使用替换密码加密解密.txt文件并输出到新.txt文件

0 投票
1 回答
4852 浏览
提问于 2025-04-16 13:42

我可以打开规则文件,并创建一个字典来进行加密。同时,我还需要创建一个字典来解密文本。我想这两个功能基本上是一样的,只是有一些小的变化。加密的部分运行得很好,但我就是无法让解密的部分正常工作。第二个问题是,在我加密文件的时候,把所有的空格和标点符号都去掉了。我不知道怎么在运行程序后把这些内容放回输出文件里。输出的内容就只是一列。最后,我需要把结果输出到一个.txt文件里。我可以创建一个用户指定名称的.txt文件,但就是无法在文件里打印任何内容。

这是我目前取得的成果。

#import clauses
import string


#function definitions



#encrypt dictionary
def createrulesdictencrypt(openFile):
    rulesencrypt1 = {}
    for line in openFile:
        rulessplit = string.split(string.strip(line))
        rulesencrypt1[rulessplit[0]] = rulessplit[1]
    return rulesencrypt1

#decrypt dictionary
def createrulesdictdecrypt(openFile):
    rulesdecrypt1 = {}
    for line in openFile:
        rulessplit = string.split(string.strip(line))
        rulesdecrypt1[rulessplit[1]] = rulessplit[0]
    return rulesdecrypt1

openFile = open('rules.txt', 'r')
rulesencrypt = createrulesdictencrypt(openFile)
rulesdecrypt = createrulesdictdecrypt(openFile)
#print rulesencrypt
#print rulesdecrypt




#function for encrypting file
def encryptfile(openFile2):
    for line in openFile2:
        for word in line.split():
            empty = ''
            for char in word:
                if char not in string.punctuation:
                    char=char.lower()
                    empty = empty+char 
                if len(empty) == 2:
                    print rulesencrypt[empty]
                    empty = ''
            if len(empty) == 1:
                print rulesencrypt[empty]



#function for decrypting file
def decryptfile(openFile2):
    for line in openFile2:
        for word in line.split():
            empty = ''
            for char in word:
                if char not in string.punctuation:
                    char=char.lower()
                    empty = empty+char 
                if len(empty) == 2:
                    print rulesdecrypt[empty]
                    empty = ''
            if len(empty) == 1:
                print rulesdecrypt[empty]


#main program

ende = raw_input("To encrypt a file, enter '0':\nTo decrypt a file, enter '1':")
filename = raw_input("Enter the name of the file to be processed:")
outfilename = raw_input("Enter the name of the file to save the result to:")
openFile2 = open(filename, 'r')
outputfile = open(outfilename, 'w')
fileencrypt = encryptfile(openFile2)
filedecrypt = decryptfile(openFile2)


if ende == "0":
    print encryptfile(fileencrypt)
if ende == "1":
    print decryptfile(filedecrypt)

这是我想要加密的内容:

罗宾爵士:“哦,你们这些骗子!”

吟游诗人:[唱歌] “勇敢地站起身来,他进行了非常勇敢的撤退。勇敢的罗宾爵士的勇敢撤退。”

1 个回答

0

你的第一个问题是,你并没有把加密后的文本写入文件,而只是把它打印到了 sys.stdout 上。顺便提一下,print 默认会在输出后加一个换行符(\n)。

你可以这样重写你的解密函数:

#function for decrypting file
def decryptfile(openFile2, outfile): # <- CHANGED to add outfile
    for line in openFile2:
        for word in line.split():
            empty = ''
            for char in word:
                if char not in string.punctuation:
                    char=char.lower()
                    empty = empty+char 
                if len(empty) == 2:
                    outfile.write(rulesdecrypt[empty]) # <- CHANGED to write to file
                    empty = ''
            if len(empty) == 1:
                outfile.write(rulesdecrypt[empty]) # <- CHANGED to write to file

然后你需要在调用解密文件的函数时,把文件作为第二个参数传进去。加密文件的函数也可以做类似的修改。

关于标点符号和空格,你可以选择加密它们,或者就保持原样。如果你把它们去掉了,之后就很难再恢复了。

撰写回答