2017-01-09 4 views
-2

У меня есть текстовый файл, который хранит информацию о заказе в следующем формате. Я пытаюсь выполнить поиск по первой строке блока, которые представляют идентификатор и печатать 7 следующих строк. Но мой код проверяет только первую строку или печатает все строки, содержащие номер ввода. Может ли кто-нибудь мне помочь?Python: поиск конкретной строки в файле

4735 
['Total price: ', 1425.0] 
['Type of menu: ', 'BBQ'] 
['Type of service: ', '  '] 
['Amount of customers: ', 25.0] 
['Discount: ', '5%', '= RM', 75.0] 
['Time: ', '2017-01-08 21:39:19'] 

3647 
['Total price: ', 2000.0] 
['Type of menu: ', ' '] 
['Type of service: ', 'Tent '] 
['Amount of customers: ', 0] 
    ....... 

Я использую следующий код для поиска в текстовом файле.

 try: 
      f = open('Bills.txt', 'r') 
      f.close() 
     except IOError: 
      absent_input = (raw_input("|----File was not founded----|\n|----Press 'Enter' to continue...----|\n")) 
      report_module = ReportModule() 
      report_module.show_report() 
     Id_input = (raw_input("Enter ID of order\n")) 
     with open("Bills.txt", "r") as f: 
      searchlines = f.readlines() 
     j = len(searchlines) - 1 
     for i, line in enumerate(searchlines): 
      if Id_input in str(line): # I also try to check in this way (Id_input == str(line)), but it didn't work 
       k = min(i + 7, j) 
       for l in searchlines[i:k]: print l, 
       print 
      else: 
       absent_input = (raw_input("|----Order was not founded----|\n|----Press 'Enter' to continue...----|\n")) 
       report_module = ReportModule() 
       report_module.show_report() 
+1

Почему вы открываете файл дважды, первый открытый не нужен, вместо этого включайте свою логику в блок try. –

+1

, как вы можете видеть в блоке 'except', он проверяет, существует ли файл. @Bogdan: используйте https://docs.python.org/2/library/os.path.html#os.path.exists или https://docs.python.org/2/library/os.path.html# os.path.isfile его гораздо более чистый – BloodyD

+1

он все еще может использовать предложение except. но открытие файла дважды для одной задачи не требуется. –

ответ

1

проверить следующий код.

Id_input = (raw_input("Enter ID of order\n")).strip() 
try: 
    f = open("Bills.txt", "r") 
    print_rows = False 
    for idline in f: 
     if idline.strip() == Id_input: 
      print_rows = True 
      continue 
     if print_rows: 
      if idline.startswith("["): 
       print idline 
      else: 
       break 

    if not print_rows: 
     absent_input = (raw_input("|----Order was not founded----|\n|---- Press 'Enter' to continue...----|\n")) 
     report_module = ReportModule() 
     report_module.show_report() 
except IOError: 
     absent_input = (raw_input("|----File was not founded----|\n|---- Press 'Enter' to continue...----|\n")) 
     report_module = ReportModule() 
     report_module.show_report() 
+0

У меня ошибка: 'AttributeError: 'str' объект не имеет атрибута 'stripe'' –

+0

my bad, typo !, проверьте его снова, str.strip() stripes any white пространство, так что это будет легко для сравнения –

+0

Хмм, этот код не работал, просто запустите программу после ввода идентификатора, но если удалить 'else' в' if idline.startswith ("["): print idline else : break' программа покажет общую стоимость поиска, и на самом деле она работает хорошо. Но нужно найти способ отображения следующих 6 строк) –

Смежные вопросы