Вместо использования csv.reader()
используйте csv.DictReader()
object. Этот объект упрощает создание ваших словарей и фильтрацию строк; ваш код, переработан использовать DictReader()
, выглядит следующим образом:
COLS = ['CUST', 'MODEL', 'SN', 'DATE', 'CHARGE', 'QTY', 'TOTAL']
with open('UserfeeInvoicing.csv', 'r') as infile:
reader = csv.DictReader(infile, fieldnames=COLS)
ranpak_dict = {row['SN']: row for row in reader}
csv.DictReader()
объект делает точно, что делает ваш dict(zip(COLS, row))
вызов; постройте словарь из каждой строки, задав последовательность имен полей.
Фильтрация в списке, определение или установление понимания работает так же, как добавление дополнительных циклов; просто добавьте if <condition>
к петле:
ranpak_dict = {row['SN']: row for row in reader if int(row['CHARGE']) > 0}
Обратите внимание на int()
вызов; Я предполагаю, что столбец CHARGE
всегда содержит цифры.
Если ваши текстовые поля указаны, вы также можете установить quoting=csv.QUOTE_NONNUMERIC
, после чего все столбцы без кавычек автоматически преобразуются в float
. Это было бы сократить код на:
reader = csv.DictReader(infile, fieldnames=COLS, quoting=csv.QUOTE_NONNUMERIC)
ranpak_dict = {row['SN']: row for row in reader if row['CHARGE'] > 0}
Вы можете уточнить состояние? 'CHARGE> 0' уже подразумевает' CHARGE! = 0' - вы имеете в виду 'CHARGE> = 0'? – Lisa
@ Lisa: Я думаю, что это всего лишь два примера. –