Python - 读取文件,寻找段落中的隐藏信息

-1 投票
1 回答
2786 浏览
提问于 2025-04-18 00:16

我想打开一个文件,里面有一段加密的信息,比如说一本书里的某段文字。

  1. 把这段文字加载成一个完整的字符串。
  2. 去掉所有不是字母的字符。
  3. 把这个字符串分成一个表格,每行至少包含5个字符。
  4. 用一串数字 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()

1 个回答

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来自itertools,这样可以用可迭代对象而不是内存中的列表来进行组合。

然后返回文本。

这里有一个调用它的示例程序:

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

撰写回答