加密和解密文本文件的程序

时间:2015-01-10 10:46:03

标签: python text

我的示例文本文件是:'abcd abcd abcd'

该程序有一个字典,每个字母都有专用的符号。目标是创建一个加密文件消息的新文件。

节目“有效”。我的意思是它只转换abc。由于字典中没有d,因此它会引发错误。我删除了d并再次尝试,但这引发了另一个错误: KeyError:''

如何使我的程序检测空格,即使没有符号,也可以写出这个字母?

def main():
    ecrypt = {'a':'%', 'b':'&', 'c':'/'}
    input_file = open('efile.txt', 'r')
    output_file = open('newefile.txt', 'w')
    line = input_file.readline()
    for letter in line:
        if letter in line:
            output_file.write(ecrypt[letter])            

main()

2 个答案:

答案 0 :(得分:5)

您可以使用try-except来处理KeyError,但作为更加pythonic的方式,您可以使用实际上用于此目标的str.translate()函数:

>>> from string import maketrans
>>> i='abc'
>>> o='%&/'
>>> trantab = maketrans(i, o)

>>> print 'abcd abcd abcd'.translate(trantab)
%&/d %&/d %&/d

并翻译文件并写入另一个文件:

from string import maketrans
i='abc'
o='%&/'
trantab = maketrans(i, o)
with open('efile.txt', 'r') as infile,open('newefile.txt', 'w') as out :
    out.write(infile.read().translate(trantab))

答案 1 :(得分:3)

您正在尝试访问不存在的ecrypt ['d']。使用当前的代码,您需要确保每个字符(不只是字母,标点符号......空格......)都在ecrypt dict中。

我建议添加例外。见https://docs.python.org/2/tutorial/errors.html 'if in line'是多余的。

for letter in line:
        try:
             output_file.write(ecrypt[letter])           
        except KeyError:
             output_file.write(letter)

或者,首先测试该字母是否存在。

for letter in line:
    cipher_letter=ecrypt[letter] if letter in ecrypt else letter       
    output_file.write(cipher_letter)