我想打开一个带有加密邮件的文件,例如书中的一段话。
4,5,4,3,1,1,2,3,4,5
来索引每一行。结果应该是这样的:
was h er
thise e
fret l
rj l
d o
这是我到目前为止所做的:
def cipher():
f = open("cipher.txt", "r")
fileString = f.readline()
for line in fileString:
lineSplit = line.split()
答案 0 :(得分:3)
您的某些索引已经关闭,因此我已将其更正为:3,5,4,2,1,1,2,3,4,5
。
以下是您需要的代码,问题是您只是在遍历行而不是从中提取任何内容。主要是因为你的功能没有输入。
此方法将类文件对象和整数列表作为“键”:
def cipher(encrypted,key):
return "".join([line[offset] for offset,line in zip(key,encrypted.readlines())])
扩大了这个:
def cipher(encrypted,key):
message=[]
for offset,line in zip(key,encrypted.readlines()):
message.append(line[offset]
return "".join(message)
或构建字符串(由于数组是可变的,可能需要更长时间,而这需要在每次迭代时构建一个新字符串):
def cipher(encrypted,key):
message=""
for offset,line in zip(key,encrypted.readlines()):
message = message + line[offset]
return message
这会将密钥和加密文件与它们zip
组合在一起,形成一个可访问的元组,我们用它来索引文件的每一行。如果文件可能很长,您可能希望使用izip
from itertools
使用iterable而不是内存中的列表进行压缩。
并返回文字。
这是一个调用它的示例程序:
from StringIO import StringIO
f = StringIO("""washer
thisee
fretl
rjl
do""")
print cipher(f,[3,5,4,2,1,1,2,3,4,5])
当跑步时打印:
>>> hello