2012-06-14 12 views
13

Ho bisogno del modo per modificare il valore specifico della colonna del file csv. Ad esempio, ho file csv:Modifica il valore specifico nel file CSV tramite Python

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

e ho bisogno di modificare il valore 23-30 di "127.0.0.2".

Io uso biblioteca csv: import csv

Apprezzare tutto l'aiuto, come io sono nuovo in Python. Grazie!

+0

Quindi, posso leggere dal file CSV e scrivere su file CSV, ma non ho un'idea di come valori nel file esistente Repace ... – ihorko

+0

Potrebbe pubblicare il leggi/scrivi il codice che hai già? Ad un certo punto dovresti avere i dati in Python e puoi modificarli lì prima di scrivere. –

risposta

26

Questa è la soluzione che apre il file csv, modifica i valori in memoria e quindi riscrive le modifiche sul disco.

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

Contenuto delle linee:

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

Modifica dei valori:

lines[2][1] = '30' 

Contenuto delle linee:

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

Ora dobbiamo solo scrivere di nuovo ad un file

writer = csv.writer(open('/tmp/output.csv', 'w')) 
writer.writerows(lines) 
+1

Se si verifica un doppio problema di interruzione di riga sul csv scritto, si potrebbe voler provare ad aprire il file come file binario: 'writer = csv.writer (aperto ('/ tmp/output.csv', 'wb'))' – Nitay

+0

Devi chiudere lo scrittore? – pekasus

+0

È necessario chiudere il descrittore di file ma non lo scrittore. Puoi usare "con" per gestire i file –

10

Non è possibile sostituire i valori nel file esistente. Invece, è necessario:

  1. lettura nel file esistente
  2. alter file in memoria
  3. scrivere nuovo file (sovrascrivendo file esistente)

Cosa si può anche fare si legge nel file esistente riga per riga, scrivendolo in un nuovo file, sostituendo al tempo stesso i valori. Al termine, chiudere entrambi i file, eliminare l'originale e rinominare il nuovo file.

4

È possibile utilizzare una libreria molto potente denominata panda. Ecco l'esempio.

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

uscita:

Ip Sites 
0 127.0.0.1 10 
1 127.0.0.2 23 
2 127.0.0.3 50 

Ora, se si desidera modificare il valore nella colonna 'Siti' nel 1 ° fila, eseguire:

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

Se si vuole cambiare tutto i valori, dove 'Ip' è uguale a 127.0.0.2, eseguire:

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

Infine, per salvare i valori:

df.to_csv("test.csv", index=False) 
Problemi correlati