Как записать данные в список CSV с помощью операторов if

#python

#питон #python

Вопрос:

Я пытаюсь записать данные в csv в новое поле / столбец с помощью операторов if (на основе значений, уже присутствующих в списке). У меня есть список UID (класс имен полей): ACRW, AOC, IFSE, LN, RLW и т. Д,

Это то, что у меня есть до сих пор:

 import csv
with open('PythonProject.csv', 'r') as rd_list:
    csv_reader = csv.reader(rd_list)
    with open ('new_rdlist.csv', 'w', newline='') as new_csvfile:
        fieldnames = ['Class', 'Description', 'Flex']
        csv_writer = csv.DictWriter (new_csvfile, fieldnames=fieldnames)
        csv_writer.writeheader()
        csv_writer = csv.writer(new_csvfile)
        Class = ''
        for row in csv_reader:
            if Class == 'C':
                value = 'Cable'
            elif Class == 'W':
                value = 'Wave'
            elif Class == 'RT':
                value = 'Therm'
            elif Class == 'H':
                value = 'Heat'
            else:
                value = 'Unit'
            csv_writer.writerow(row)            
input('nNew List is in your directory, Press Enter to exit')
  

Ожидаемый результат состоит в том, чтобы заполнить CSV следующим образом:,
Класс, Описание, Гибкий (который является новым полем)
(ACRW, уникальное имя, Единица измерения)
(AOC, уникальное имя, Единица измерения)
(C, уникальное имя, Кабель)
(IFSE, уникальное имя, Единица измерения)
(LN, уникальное имя, Единица измерения)
(RLW, уникальное имя, Единица измерения)
(W, уникальное имя, Волна)
и т.д…

Ответ №1:

Надеюсь, я правильно вас понял, я предполагаю, что вы намерены прочитать в "PythonProject.csv" и записать те же данные с дополнительным столбцом в "new_rdlist.csv" .

Доступ к данным и манипулирование ими

Основная проблема, похоже, заключается в понимании строк в DictReader и DictWriter . Поскольку вы уже используете DictWriter , я предлагаю также использовать DictReader класс. Доступ к ячейкам / полям в каждой строке можно получить по именам столбцов. Таким образом, вы можете получить доступ к значению «Класс», поэтому первая проверка будет гласить:

 if row["Class"] == "C":
  value = "Cable"
  

вы даже можете напрямую управлять словарем строк:

 if row["Class"] == "C":
  row["Flex"] = "Cable"
  

После этой модификации остальное должно быть легко решаемо!

Другие проблемы

csv_writer = csv.writer(new_csvfile) является избыточным, поскольку он снова перезаписывает csv_writer переменную

(Почти) окончательный код

 import csv
with open('PythonProject.csv', 'r') as rd_list:
    csv_reader = csv.DictReader(rd_list)
    with open ('new_rdlist.csv', 'w', newline='') as new_csvfile:
        fieldnames = ['Class', 'Description', 'Flex']
        csv_writer = csv.DictWriter (new_csvfile, fieldnames=fieldnames)
        csv_writer.writeheader()
        for row in csv_reader:
            if row["Class"] == "C":
                row["Flex"] = "Cable"
            ...
                row["Flex"] = "Unit"
            csv_writer.writerow(row)            
input('nNew List is in your directory, Press Enter to exit')