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!
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)
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:
- odczyt w istniejącym pliku
- zmiana pliku w pamięci
- 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.
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)
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