在Python中使用替换密码加密解密.txt文件并输出到新.txt文件
我可以打开规则文件,并创建一个字典来进行加密。同时,我还需要创建一个字典来解密文本。我想这两个功能基本上是一样的,只是有一些小的变化。加密的部分运行得很好,但我就是无法让解密的部分正常工作。第二个问题是,在我加密文件的时候,把所有的空格和标点符号都去掉了。我不知道怎么在运行程序后把这些内容放回输出文件里。输出的内容就只是一列。最后,我需要把结果输出到一个.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
然后你需要在调用解密文件的函数时,把文件作为第二个参数传进去。加密文件的函数也可以做类似的修改。
关于标点符号和空格,你可以选择加密它们,或者就保持原样。如果你把它们去掉了,之后就很难再恢复了。