Saltar al contenido

¿Cómo agregar una nueva columna a un archivo CSV?

Intenta entender el código de forma correcta antes de aplicarlo a tu proyecto si ttienes algo que aportar puedes comentarlo.

Solución:

Esto debería darle una idea de qué hacer:

>>> v = open('C:/test/test.csv')
>>> r = csv.reader(v)
>>> row0 = r.next()
>>> row0.append('berry')
>>> print row0
['Name', 'Code', 'berry']
>>> for item in r:
...     item.append(item[0])
...     print item
...     
['blackberry', '1', 'blackberry']
['wineberry', '2', 'wineberry']
['rasberry', '1', 'rasberry']
['blueberry', '1', 'blueberry']
['mulberry', '2', 'mulberry']
>>> 

Edite, tenga en cuenta que en py3k debe usar next(r)

Gracias por aceptar la respuesta. Aquí tienes un bono (tu script de trabajo):

import csv

with open('C:/test/test.csv','r') as csvinput:
    with open('C:/test/output.csv', 'w') as csvoutput:
        writer = csv.writer(csvoutput, lineterminator='n')
        reader = csv.reader(csvinput)

        all = []
        row = next(reader)
        row.append('Berry')
        all.append(row)

        for row in reader:
            row.append(row[0])
            all.append(row)

        writer.writerows(all)

tenga en cuenta

  1. la lineterminator parámetro en csv.writer. De forma predeterminada, está configurado para 'rn' y es por eso que tienes doble espacio.
  2. el uso de una lista para agregar todas las líneas y escribirlas de una sola vez con writerows. Si su archivo es muy, muy grande, probablemente no sea una buena idea (RAM), pero para archivos normales creo que es más rápido porque hay menos E/S.
  3. Como se indica en los comentarios de esta publicación, tenga en cuenta que en lugar de anidar los dos with declaraciones, puede hacerlo en la misma línea:

    con open(‘C:/test/test.csv’,’r’) como csvinput, open(‘C:/test/output.csv’, ‘w’) como csvoutput:

Me sorprende que nadie sugiriera Pandas. Aunque el uso de un conjunto de dependencias como Pandas puede parecer más complicado de lo necesario para una tarea tan fácil, produce un script muy corto y Pandas es una gran biblioteca para realizar todo tipo de manipulación de datos CSV (y realmente todos los tipos de datos). . No puedo discutir con 4 líneas de código:

import pandas as pd
csv_input = pd.read_csv('input.csv')
csv_input['Berries'] = csv_input['Name']
csv_input.to_csv('output.csv', index=False)

¡Consulte el sitio web de Pandas para obtener más información!

contenido de output.csv:

Name,Code,Berries
blackberry,1,blackberry
wineberry,2,wineberry
rasberry,1,rasberry
blueberry,1,blueberry
mulberry,2,mulberry

import csv
with open('input.csv','r') as csvinput:
    with open('output.csv', 'w') as csvoutput:
        writer = csv.writer(csvoutput)

        for row in csv.reader(csvinput):
            if row[0] == "Name":
                writer.writerow(row+["Berry"])
            else:
                writer.writerow(row+[row[0]])

¿Quizás algo así es lo que pretendías?

Además, csv significa valores separados por comas. Entonces, creo que necesitas comas para separar tus valores de esta manera:

Name,Code
blackberry,1
wineberry,2
rasberry,1
blueberry,1
mulberry,2

Recuerda algo, que te brindamos la opción de parafrasear si hallaste tu inconveniente a tiempo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *