Python parse csv file – reemplaza las comas con dos puntos

Sospecho que este es un problema común, pero parece que no encuentro la respuesta. Estoy tratando de eliminar todas las comas de un archivo csv y reemplazarlos con dos puntos. Normalmente utilizaría sed o vi para esto, pero necesito usar una implementación puramente python. Esto es lo que he encontrado hasta ahora:

import csv with open("temp.csv", mode="rU") as infile: reader = csv.reader(infile, dialect="excel") with open("temp2.txt", mode="w") as outfile: writer = csv.writer(outfile) for rows in reader: for parsed_item in rows: parsed_item = rows.replace(',', ':') # I can't do this with a list! writer.writerow(parsed_item) 

¿Alguien puede ayudarme con cómo hacer esto? Gracias de antemano por tu ayuda.

La respuesta es más fácil de lo que piensas. Solo necesita configurar el delimitador para csv.writer :

 import csv row = #your data with open("temp.csv", mode="rU") as infile: reader = csv.reader(infile, dialect="excel") with open("temp2.txt", mode="w") as outfile: writer = csv.writer(outfile, delimiter=':') writer.writerows(rows) 

La línea que intenta reemplazar , con : no iba a hacer nada porque la fila ya había sido procesada por csv.reader .

Si está buscando leer un csv con delimitador de coma y escribirlo en otro archivo con delimitadores de punto y coma. Creo que una forma más directa sería:

 reader = csv.reader(open("input.csv", "rU"), delimiter=',') writer = csv.writer(open("output.csv", 'w'), delimiter=';') writer.writerows(reader) 

Encuentro este ejemplo mucho más fácil de entender que con el with open(...) . También si trabajas con archivos usando coma y punto y coma como delimitadores. Puede usar el Sniffer del archivo csv para detectar qué delimitador se usa antes de leer el archivo (ejemplo en el enlace).

Además, si desea volver a escribir en el mismo archivo, verifique esta respuesta de stackoverflow .

Suponiendo que el CSV está delimitado por comas, y desea reemplazar las comas en cada entrada, creo que el problema es reemplazar el elemento incorrecto:

 for rows in reader: for parsed_item in rows: parsed_item = parsed_item.replace(',', ':') # Change rows to parsed_item writer.writerow(parsed_item) 

Si solo está reemplazando las comas con dos puntos, no necesita usar un analizador CSV en absoluto.

 with open("file.csv", 'r') as f: with open("temp.csv", 'w') as t: for lines in f: new_line = line.replace(",",":") t.write(new_line) 

La única advertencia es que no puede tener comas en ninguna otra parte del archivo csv.