Запись файла CSV - невозможно найти решение, чтобы избежать дублирования строк при заданном условии c - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь написать новый CSV-файл, который анализирует больший файл и записывает только строки в соответствии с моими указанными c условиями. У меня возникла проблема с тем, чтобы мои условия работали правильно, потому что я не хочу, чтобы новая строка записывалась как 'Номер SKU', а 'Флаг складирования деталей' был 'Y'.

Я попытался пройти через это, добавив еще один для l oop перед основным для l oop, который продолжил бы через записи, если было выполнено вышеуказанное условие.

Любая помощь приветствуется, ниже код.

import csv

with open('4-22 inventory.csv', 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file)

    with open ('stocking.csv', 'w', newline = '') as new_file:

        fieldnames = ['SEGMENT_CODE','WHS_NUMBER','WHS_GL_NUMBER',  'LINE_CODE',    'SUBLINE_CODE', 'PART_NBR', 'SKU_NUMBER',   'MASTER_ITEM_FLAG',
        'PART_STOCKING_FLAG',   'PART_STATUS_CODE', 'PART_MOVEMENT_CODE',   'SUB_MOVEMENT_CODE',
        'FULL_MOVEMENT_CODE',   'FACTORY_PACK_QTY', 'OH_UNIT_QTY',  'ON_ORDER_UNIT_QTY',    'UNIT_COST']

        csv_writer = csv.DictWriter(new_file, fieldnames = fieldnames)

        csv_writer.writeheader()

        for line in csv_reader:
            for lines in new_file:
                if lines['SKU_NUMBER'] and lines['PART_STOCKING_FLAG'] == 'Y':
                    continue
            if line['WHS_NUMBER'] == 'NCI' and line['PART_STOCKING_FLAG'] == 'Y':
                    csv_writer.writerow(line)
            elif line['WHS_NUMBER'] != 'NCI' and line['SKU_NUMBER'] and line['PART_STOCKING_FLAG'] == 'Y':
                True
                continue
            else:
                csv_writer.writerow(line)

1 Ответ

0 голосов
/ 29 апреля 2020

У вас проблемы с формулировкой ваших условий. Условие:

if lines['SKU_NUMBER'] and lines['PART_STOCKING_FLAG'] == 'Y':

не проверяет, что SKU_NUMBER и PART_STOCKING_FLAG должны равняться Y

но проверяет, что PART_STOCKING_FLAG равно Y, а SKU_NUMBER логично True, т. Е. Не пустая строка, False, None и т. Д. c. Так что в вашем случае будут написаны строки с PART_STOCKING_FLAG='Y' и не пустым SKU_NUMBER.

Если вы хотите проверить, что и SKU_NUMBER, и PART_STOCKING_FLAG являются Y, вы должны сделать:

if lines['SKU_NUMBER']== 'Y' and lines['PART_STOCKING_FLAG'] == 'Y':
    pass
...