Python - 读取文件,在段落中查找隐藏的消息

时间:2014-03-28 03:44:50

标签: python python-3.x

我想打开一个带有加密邮件的文件,例如书中的一段话。

  1. 将通道装入一根绳子。
  2. 删除任何不是字母的字符。
  3. 将字符串分成表格,每行至少5个字符。
  4. 使用一系列数字4,5,4,3,1,1,2,3,4,5来索引每一行。
  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()
    

1 个答案:

答案 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