我的示例文本文件是:'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()
答案 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)