У меня есть адресная книга и вы хотите напечатать все (возможно несколько) записей, для данной «фамилии» эффективно.условно чтение блока строк из файла в python
Запись имеет следующую структуру:
Johnsen
Paul
First Street
313
94134
State1
1343154622525
[email protected]
Parker
Peter
Scnd Street
44
91347
State2
1343154622525
[email protected]
...
Мой код пока выглядит следующим образом:
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', который является довольно простым (хотя и не идеальным) способом сделать что-то подобное, с некоторыми предварительными работами ... –