#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="")