[Tenga en cuenta que esta es una cuestión diferente de la que ya contestado How to replace a column using Python’s built-in .csv writer module?]Escribir con Python módulo incorporado .csv
Necesito hacer una búsqueda y reemplazo (específico de una columna de URLs) en una enorme Archivo Excel .csv Como estoy en las etapas iniciales de tratar de enseñarme un lenguaje de scripting, pensé que trataría de implementar la solución en python.
Tengo problemas cuando intento volver a escribir en un archivo .csv después de realizar un cambio en el contenido de una entrada. He leído el official csv module documentation sobre cómo usar el escritor, pero no hay un ejemplo que cubra este caso. Específicamente, estoy intentando que las operaciones de lectura, reemplazo y escritura se realicen en un ciclo. Sin embargo, no se puede usar la misma referencia de "fila" en el argumento del bucle for y como el parámetro para writer.writerow(). Entonces, una vez que haya realizado el cambio en el ciclo for, ¿cómo debo volver a escribir en el archivo?
edición: he implementado las sugerencias de S. Lott y Jimmy, sigue siendo el mismo resultado
edición # 2: añadí el "RB" y "wb" a la intemperie() funciones, por sugerencia de S. Lott
import csv
#filename = 'C:/Documents and Settings/username/My Documents/PALTemplateData.xls'
csvfile = open("PALTemplateData.csv","rb")
csvout = open("PALTemplateDataOUT.csv","wb")
reader = csv.reader(csvfile)
writer = csv.writer(csvout)
changed = 0;
for row in reader:
row[-1] = row[-1].replace('/?', '?')
writer.writerow(row) #this is the line that's causing issues
changed=changed+1
print('Total URLs changed:', changed)
edición: Para su referencia, esta es la nueva rastreo completo del intérprete:
Traceback (most recent call last):
File "C:\Documents and Settings\g41092\My Documents\palScript.py", line 13, in <module>
for row in reader:
_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
Muy bien, yo también me ocupé de ese tema. Parece que nos estamos acercando ... La trazabilidad se acortó :) – ignorantslut
Ahora que lo pienso, antes de intentar volver a escribir en el archivo (es decir, cuando aún estaba trabajando para encontrar la columna de la derecha en el .csv), el script funcionaba bien sin el rb. – ignorantslut
"El" rb "y" wb "son absolutamente necesarios.": No en Python 3. Allí, debe llamar a open() con newline = ''. – Miles