我有一个地址簿,并希望有效地打印所有(可能是多个)条目,以获得给定的“姓氏” .
条目具有以下结构:
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行块的起始行(包括空白行) . 现在我想知道如何生成和使用一个可以再次打开文件的序列,并只读取匹配的块来查找 . 我很确定还有一种更有效的方法,我很好奇 .
感谢帮助 .
3 回答
您始终可以将文件加载到dict中,其中key为l_name,data为所有内容 . 我为你写了一个小工作部分 . 我建议创建一个类Address_book,它具有加载数据,搜索,添加数据和写回数据的功能 . 这将是简单而直接的,但我不会为你做一切!
如果您的文件足够小以适合内存,则可以将数据存储在dict中,其中每个姓氏对应于一个或多个条目的列表:
的test.txt
谢谢你的建议 . 我非常欣赏 Build 地址簿类的想法以及内存中的方法,尽管不是我需要的 .
我的 - 不是最有效但最简单的 - 解决方法如下所示:
关于避免遍历文本文件的每一行的任何建议都非常受欢迎 .