Python - 读取文件,寻找段落中的隐藏信息
我想打开一个文件,里面有一段加密的信息,比如说一本书里的某段文字。
- 把这段文字加载成一个完整的字符串。
- 去掉所有不是字母的字符。
- 把这个字符串分成一个表格,每行至少包含5个字符。
- 用一串数字
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