2012-06-14 12 views
13

Necesito la forma de cambiar el valor específico de la columna del archivo csv. Por ejemplo, tengo un archivo CSV:Cambiar el valor específico en el archivo CSV a través de Python

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

y necesito cambiar el valor 23 a 30 de la "127.0.0.2".

Yo uso de la biblioteca csv: Importar CSV

agradecería cualquier ayuda que yo soy nuevo en Python. ¡Gracias!

+0

Por lo tanto, puedo leer desde un archivo CSV y escribir en el archivo csv, pero no tienen una idea de cómo los valores en archivo existente Repace ... – ihorko

+0

Podría publicar la leer/escribir el código que ya tiene? En algún punto, debe tener los datos en Python y puede modificarlos allí antes de escribir. –

Respuesta

26

Esta es la solución que abre el archivo csv, cambia los valores en la memoria y luego vuelve a escribir los cambios en el disco.

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

contenido de las líneas:

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

Modificación de los valores:

lines[2][1] = '30' 

contenido de las líneas:

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

Ahora sólo tenemos que escribirlo de nuevo a una archivo

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

Si se encuentra con un problema de doble salto de línea en la csv escrita, puede intentar abrir el archivo como un binario: 'writer = csv.writer (open ('/ tmp/output.csv', 'wb'))' – Nitay

+0

¿Tienes que cerrar el escrito? – pekasus

+0

Debe cerrar el descriptor de archivo pero no el escritor. Puede usar "con" para administrar archivos –

10

Realmente no puede reemplazar valores en el archivo existente. En lugar de ello, es necesario:

  1. de lectura en el archivo existente
  2. archivo alter en la memoria
  3. escribir nuevo archivo (sobrescribir archivo existente)

Lo que también se puede hacer es leer en el archivo existente línea por línea, escribiéndolo en un nuevo archivo, mientras reemplaza valores sobre la marcha. Cuando termine, cierre ambos archivos, elimine el original y cambie el nombre del nuevo archivo.

4

Puede usar una biblioteca muy poderosa llamada pandas. Aquí está el ejemplo.

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

Salida:

Ip Sites 
0 127.0.0.1 10 
1 127.0.0.2 23 
2 127.0.0.3 50 

Ahora bien, si desea cambiar el valor en la columna 'Sitios' en la primera fila, ejecute:

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

Si desea cambiar todo los valores, donde 'IP' es igual a 127.0.0.2, ejecute:

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

Por último, para guardar los valores:

df.to_csv("test.csv", index=False) 
Cuestiones relacionadas