【发布时间】:2016-05-25 14:35:37
【问题描述】:
我有一个地址簿,想打印所有(可能是多个)条目, 有效地为给定的“姓氏”。
条目具有以下结构:
Johnsen
Paul
First Street
313
94134
State1
1343154622525
myemail101@mail.com
Parker
Peter
Scnd Street
44
91347
State2
1343154622525
myemail224@mail.com
...
到目前为止,我的代码如下所示:
print("1) Look up by last name")
print("2) Add a person to address book")
print("3) Quit App")
choice = int(input("Enter your choice (1/2/3): "))
if choice == 1:
lname = input("Enter last name: ")
addressbook = open("addressbook.txt", "r")
import itertools
lnameLines = itertools.islice(addressbook, 0, None, 9)
matchingLines = []
lineNumber = 0
for n in lnameLines:
if lname.lower() == n.rstrip().lower():
matchingLines.append(lineNumber)
lineNumber = lineNumber + 9
print(matchingLines)
这会产生要读取的匹配 9 行块的起始行(包括空白行)。 现在我想知道如何生成和使用将再次打开文件并仅读取匹配块以进行查找的序列。 我很确定还有一种我很好奇的更有效的方法。
感谢您的帮助。
【问题讨论】:
-
行不是很有用...要正确执行此操作,您需要文件中的实际字节偏移量...但也许可以查看
shelve模块,这很容易(尽管不完美)做类似事情的方法,有一些准备工作......
标签: python io conditional readline