Как переписать только одно поле (строка [n]) в csv, но при этом иметь возможность работать с данными?

У меня есть файл csv с тремя строками и тремя столбцами.

Это файл csv

Сначала я хочу напечатать все строки. Впоследствии для каждого из них программа проверяет, записано ли оно во втором поле (индекс 1) USA. Если это так, программа возьмет цену из третьего поля и умножит ее на два.

Теперь мне нужно переписать эту удвоенную цену вместо 2000 (по США)

      import csv

with open('countries.csv', 'r') as source:
    reader = csv.reader(source)
    writer = csv.writer(source)

    for line in reader: 
        print(*line, sep=';')

with open('countries.csv', 'r') as source: 
    reader = csv.reader(source)

    for line in reader:
        if line[2] == "USA":
            actual_price = int(line[2])
            print(actual_price)
            new_price = int(actual_price) * 2
            print(new_price)

Кто-то уже посоветовал мне воспользоваться созданием нового файла. Но это вызывает проблемы, когда я хочу сначала поработать с данными в файле.

      import csv
import os

  


with open('countries.csv', mode='r') as oldfile, open(
        'countries.tmp', mode='w', newline='') as newfile:
    # define a reader and a writer
    reader = csv.reader(oldfile, delimiter=';', quotechar='"')
    writer = csv.writer(newfile, delimiter=';', quotechar='"',
                        quoting=csv.QUOTE_MINIMAL)
   
    for line in reader: 
       print(*line, sep=';')



    # copy everything changing the third field


    for line in reader:
        if line[2] == "USA":
            actual_price = int(line[2])
            print(actual_price)
            new_price = int(actual_price) * 2
            print(new_price)

    for row in reader:
        writer.writerow([row[0], row[1], ,new_price])


# ok, time to rename the file
os.replace('countries.tmp', 'countries.csv')

Спасибо за ответ

1 ответ

Решение

Ты меняешься new_price на каждой итерации вашего forпетля. Поэтому вы должны писать строку внутри цикла, в которой вы меняете значение:

      with open('countries.csv', mode='r') as oldfile, open('countries.tmp', mode='w', newline='') as newfile:
    reader = csv.reader(oldfile, delimiter=';', quotechar='"')
    writer = csv.writer(newfile, delimiter=';', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    for row in reader:
        price = int(row[2])
        if row[1] == "USA":
            price = price*2
        writer.writerow([row[0], row[1], price])

os.replace('countries.tmp', 'countries.csv')
Другие вопросы по тегам