Как добавить две колонки и обновить CSV в python? - PullRequest
0 голосов
/ 27 октября 2019

У меня есть вопрос здесь:

Напишите функцию с именем computed_column, которая принимает строку в качестве параметра, представляющего имя файла CSV с 5 столбцами в формате <string>,<int>,<int>,<int>,<int>, и записываетфайл с именем creation.csv, содержащий все данные из входного файла, но с шестым столбцом, содержащим сумму значений из третьего и второго столбцов.

Это то, что я пробовал:

    import csv
    def computed_column(csvfile):
    with open(csvfile,newline='') as f:
      with open('creation.csv','w',newline='') as f2:
        y=[]
        writer = csv.writer(f2)
        rows = csv.reader(f)
        for row in rows:
          for i in range(0,len(row[1])):
            y.append(int(row[1][i]) + int(row[2][i]))
          writer.writerow(row+y)

Он правильно записывает исходный файл, но выдает неправильный вывод для шестого столбца, который должен быть записан.

1 Ответ

0 голосов
/ 27 октября 2019

Если я правильно понимаю ваш вопрос, вам не нужен внутренний цикл for. Для каждой строки вы просто хотите добавить значения во второй и третий столбцы (, что строка) и вставить сумму в качестве значения шестого столбца. Вам просто нужно пройтись по каждой строке, а затем использовать row index для доступа ко второму и третьему столбцам.

Кроме того, ваш список y увеличивается с каждой строкой, которую вы обрабатываете(который добавляет дополнительный столбец каждый раз). Я не думаю, что это твое намерение. Переместите это в свой цикл for, чтобы оно сбрасывалось в пустой список с каждой строкой. Попробуйте что-то вроде этого:

def computed_column(csvfile):
    with open(csvfile,newline='') as f:
        with open('creation.csv','w',newline='') as f2:
            writer = csv.writer(f2)
            rows = csv.reader(f)
            for row in rows:
                y=[]
                y.append(int(row[1]) + int(row[2]))
                writer.writerow(row+y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...