Как заменить слово в файле csv в определенном столбце на python

Добрый день,

Я попытался изменить слово в определенном столбце, используя индекс, в файле csv, но оно не изменилось.

Мой код, который я пытался использовать:

import csv

with open('INPUT.CSV', 'r') as file1, open('OUTPUT.csv','w',newline='') as file2:
   reader = csv.reader(file1, delimiter=',')
   writer = csv.writer(outfile, delimiter=',')

   for row in reader:
        row[0].replace('word','changed word')# I want to replace in first column=row[0] 'word' with 'changed word'
        writer.writerow(row)

Выходной файл такой же, как и входной, без изменений.

Может ли кто-нибудь помочь мне в этом? Большое спасибо заранее!


person Sorin Beginner    schedule 22.03.2016    source источник


Ответы (2)


Рабочий пример был бы лучше (выход открыт как file2, но писатель получает outfile)

Но в любом случае ваша проблема replace

  • replace возвращает копию строки (с замененным текстом, если критерии совпадают)

Но вы отбрасываете возвращаемое значение. Вы на самом деле ничего не меняете в row[0]

Решение:

replaced = row[0].replace('word','changed word')  # I want to replace in first column=row[0] 'word' with 'changed word'
row[0] = replaced
writer.writerow(row)
person mementum    schedule 22.03.2016
comment
Спасибо @mementum за ваше решение... Я попробовал код с ним, но кажется, что изменение выполняется не только в определенной строке (строка [x]), оно заменяет все найденные совпадения... Можно сделать что-то в этом роде? - person Sorin Beginner; 23.03.2016

row[0].replace() ничего не заменяет в строке [0]. Из строки документации:

S.replace(старый, новый[, количество]) -> строка

Возвращает копию строки S, в которой все вхождения старой подстроки заменены новой. Если задан необязательный аргумент count, заменяются только первые экземпляры count.

Если вы хотите изменить значение row[0], вам нужно что-то вроде row[0] = new_value.

person Stop harming Monica    schedule 22.03.2016