Zmiana określonej wartości w pliku CSV za pomocą Pythona

Potrzebuję sposobu na zmianę określonej wartości kolumny pliku csv. Na przykład mam plik csv:

"Ip","Sites"
"127.0.0.1",10
"127.0.0.2",23
"127.0.0.3",50

I muszę zmienić wartość 23 na 30 z "127.0.0.2".

Używam biblioteki csv: import csv

Doceniam każdą pomoc, ponieważ jestem nowy w Pythonie. Dzięki!

Author: ihorko, 2012-06-14

3 answers

Jest to rozwiązanie otwierające plik csv, zmieniające wartości w pamięci, a następnie zapisujące zmiany na dysk.

r = csv.reader(open('/tmp/test.csv')) # Here your csv file
lines = list(r)

Treść wierszy:

[['Ip', 'Sites'],
 ['127.0.0.1', '10'],
 ['127.0.0.2', '23'],
 ['127.0.0.3', '50']]

Modyfikowanie wartości:

lines[2][1] = '30'

Treść wierszy:

[['Ip', 'Sites'],
 ['127.0.0.1', '10'],
 ['127.0.0.2', '30'],
 ['127.0.0.3', '50']]

Teraz musimy tylko zapisać go z powrotem do pliku

writer = csv.writer(open('/tmp/output.csv', 'w'))
writer.writerows(lines)
 29
Author: Diego Navarro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-31 11:14:50

Naprawdę nie można zastąpić wartości w istniejącym pliku. Zamiast tego musisz:

  1. odczyt w istniejącym pliku
  2. zmiana pliku w pamięci
  3. wypisanie nowego pliku (nadpisanie istniejącego pliku)

To, co możesz zrobić, to odczytać w istniejącym pliku wiersz po linii, zapisać go do nowego pliku, zastępując wartości w locie. Po zakończeniu zamknij oba pliki, usuń oryginalny i zmień nazwę nowego pliku.

 11
Author: Daren Thomas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-14 13:15:39

Możesz użyć bardzo potężnej biblioteki o nazwie pandy. Oto przykład.

import pandas as pd
df = pd.read_csv("test.csv")
df.head(3) #prints 3 heading rows

Wyjście:

    Ip  Sites
0   127.0.0.1   10
1   127.0.0.2   23
2   127.0.0.3   50

Teraz, jeśli chcesz zmienić wartość w kolumnie "Sites" w pierwszym wierszu, Uruchom:

df.set_value(1, "Sites", 30)

Jeśli chcesz zmienić wszystkie wartości, gdzie ' Ip ' jest równe 127.0.0.2, Uruchom:

df.loc[df["Ip"]=="127.0.0.2", "Sites"] = 30

Wreszcie, aby zapisać wartości:

df.to_csv("test.csv", index=False)
 9
Author: Yury,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-21 13:27:53