Как прочитать из текстового файла и выяснить, какая строка имеет целочисленное значение меньше определенного присвоенного значения в Python?

#python #python-3.x

#python #python-3.x

Вопрос:

Этот текстовый файл AssemblySecDetails.txt

 Section: AS Part ID: ABS01 Order from warehouse to aircond section: 500 quantity left in the warehouse: 1000
Section: BS Part ID: BBS02 Order from warehouse to brake section: 600 quantity left in the warehouse: 1000
Section: ES Part ID: ES04 Order from warehouse to engine section: 100 quantity left in the warehouse: 1000
Section: BWS Part ID: BWBS03 Order from warehouse to bodywork section: 700 quantity left in the warehouse: 9
Section: TS Part ID: TS05 Order from warehouse to tyre section: 300 quantity left in the warehouse: 1000
Section: AS Part ID: ABS01 Order from warehouse to aircond section: 300 quantity left in the warehouse: 5
  

Я пытаюсь выяснить, какой идентификатор части имеет количество меньше 10

 fHand = open("AssemblySecDetails.txt", 'r')
partsDetails = fHand.readlines()
    def condition(parts):    
        filteredLines = [parts for parts in partsDetails if condition(parts)]
        quantity = re.search("quantity left in the warehouse: (d )", parts).group(1)
        quantity = int(quatity)
        return quantity < 10
    condition(parts)
  

вывод
UnboundLocalError: local variable 'parts' referenced before assignment

В чем ошибка в моем коде и как я должен вызвать функцию?

Комментарии:

1. Какую ошибку вы получаете? Также я вижу, что вы добавили рекурсивный вызов condition функции без каких-либо инструкций exit, пожалуйста, проверьте это

2. Привет, я обновил ошибку вывода, а также я не уверен, какой аргумент передать частям условия ( частям )

Ответ №1:

Посмотрите, как работает понимание списка. Просто прочитайте данные из файла и поймите их с помощью beforhend (или встроенного), определенного condition :

 def condition(parts): # using re module
    import re
    quantity = re.search("quantity left in the warehouse: (d )", parts).group(1)
    quantity = int(quantity)
    return quantity < 10

def condition(parts): # or if quantity is always 18th word
    quantity = parts.split()[17]
    quantity = int(quantity)
    return quantity < 10

# read lines
with open("AssemblySecDetails.txt") as f:
    partsDetails = f.readlines()
#filter lines
filteredLines = [parts for parts in partsDetails if condition(parts)]
# print lines
for line in filteredLines: print(line,end="")
  

Oneliner:

 with open("AssemblySecDetails.txt") as f: print("".join(line for line in f if int(line.split()[17])<10),end="")