Ficheros CSV separados por comas

Vamos a ver desde la introducción de datos en los referidos ficheros hasta varias formas de leer los mismos.

Empezaremos creando el fichero.

#!/usr/bin/python
#
# Nos crea un fichero -csv-. Introducimos fichero y extension
#
fichero_nuevo = raw_input("Introduce el nombre y la extension del fichero a crear: ")
archivo = open(fichero_nuevo, "w")
print "El archivo se ha creado correctamente"
archivo.close
print 
La salida sería: 
Introduce el nombre y la extension del fichero a crear: fichero_nuevo.csv
El archivo se ha creado correctamente. 
Si hacemos un listado de ficheros del directorio (ls -l) nos damos cuenta de que
ha creado el fichero "fichero_nuevo.csv"

Una vez creado el fichero, vamos  a introducir datos

Creamos un script para ello.

#!/usr/bin/python
# -*- coding: utf-8 -*-
#
pregunta = raw_input("Desea Introducir Datos [s/n]: ")

while pregunta == "s":

    archivo = open("fichero_nuevo.csv", "a") 

    factura = raw_input("Introduce Factura: ")
    producto = raw_input("Introduce Producto: ")
    cantidad = raw_input("Introduce Cantidad: ")
    precio = raw_input("Introduce Precio: ")
    peso = raw_input("Introduce Peso: ")
    ano = raw_input("Introduce Ano: ")

    archivo.write(factura)
    archivo.write(",")    
    archivo.write(producto)
    archivo.write(",")
    archivo.write(cantidad)
    archivo.write(",")
    archivo.write(precio)
    archivo.write(",")
    archivo.write(peso)
    archivo.write(",")
    archivo.write(ano)
    archivo.write("\n")   

    archivo.close()

    pregunta = raw_input("Desea seguir Introduciendo Datos [s/n]: ")

print "Adios"
print 

Una vez introducidos los datos, vamos a leerlos de varias formas, según nos interese para hacer un tipo de algoritmo u otro.

#!/usr/bin/python
# -*- coding: utf-8 -*- 
print
print "Nos lee todo el archivo como si hicieses un -cat-"
print

with open("fichero_nuevo.csv", "r") as archivo:
    print archivo.read()
print 
#!/usr/bin/python
# -*- coding: utf-8 -*- 
print
print "Lee cada fila del archivo EN FORMA DE LISTA y separada por comas"
print

with open("fichero_nuevo.csv", "r") as archivo:
    lineas = archivo.read().splitlines()
    print lineas
print
#!/usr/bin/python
# -*- coding: utf-8 -*- 
print
print "Lee cada fila del archivo separada por comas MENOS EL ENCABEZAMIENTO"
print

with open("fichero_nuevo.csv", "r") as archivo:
    lineas = archivo.read().splitlines()
    lineas.pop(0)   # ESTA LINEA ES PARA NO IMPRIMIR EL ENCABEZAMIENTO (LA PRIMERA LINEA)
    print lineas
print
#!/usr/bin/python
# -*- coding: utf-8 -*- 
print
print "Lee cada fila del archivo separada por comas EN FORMA DE LISTA"
print

with open("fichero_nuevo.csv", "r") as archivo:
    lineas = archivo.read().splitlines()
    lineas.pop(0)    # NO IMPRIMIR EL ENCABEZAMIENTO
    for l in lineas:
        linea = l.split(",")  
        print linea
print
#!/usr/bin/python
# -*- coding: utf-8 -*- 
print
print "Lee de varias formas. Elegimos dos o tres columnas del archivo (con indices), por ejemplo Cantidad, Precio, Peso, etc. y te lee las columnas elegidas EN FORMA DE LISTA y modo normal o decimales, MENOS EL ENCABEZAMIENTO."
print

datos = []
datos1 = []
datos2 = []
datos3 = []

with open("fichero_nuevo", "r") as archivo:
    lineas = archivo.read().splitlines()
    lineas.pop(0)  
    for l in lineas:
        linea = l.split(",")   
        datos.append([float(linea[2]), float(linea[3])])    # PONGO -float- PORQUE QUIERO LEER DECIMALES

        datos1.append([(linea[1]), (linea[2]), (linea[3])])  
        datos2.append([(linea[1]), float(linea[2]), float(linea[3])])  # LEE LISTA Y DECIMALES

        datos3.append([(linea[0]), float(linea[2]), (linea[3]), float(linea[4])])

print "Leera una lista de dos columnas con decimales"
print datos
print "Leera una lista de tres columnas sin decimales"
print datos1
print "Leera una lista de tres columnas sin y con decimales"
print datos2
print "Leera una lista de cuatro columnas - sin - con - sin - con - decimales"
print datos3
print 
#!/usr/bin/python
# -*- coding: utf-8 -*- 
print
print "Lee las dos columnas elegidas (Cantidad y Precio)  en forma de lista normal y ordenadas CON DECIMALES. NO LEE ENCABEZAMIENTO."
print

datos = []

with open("fichero_nuevo.csv", "r") as archivo:
    lineas = archivo.read().splitlines()
    lineas.pop(0)   
    for l in lineas:
        linea = l.split(",")  
        datos.append([float(linea[2]), float(linea[3])])  
x = []
y = []
for elem in (datos):       # LEE DE MANERA NORMAL
    x.append(elem[0])
    y.append(elem[1])

print "Leera de manera desordenada"
print x
print y

a = []
b = []
for elem in sorted(datos):   # LA ORDEN -sorted- ORDENA DE MENOR A MAYOR
    a.append(elem[0])
    b.append(elem[1])

print "Leera de manera ordenada"
print a
print b
print 
#!/usr/bin/python
# -*- coding: utf-8 -*- 
print
print "Trabajo con -csv.reader- y -delimiter-. Lee columnas -Producto- y -Precio-."
print "Lee el archivo con el modulo -csv- y lo imprime en forma de texto normal"
print

import csv

with open("fichero_nuevo.csv", "r") as file:
#    reader = csv.reader(file)  # NOS LEE LA TOTALIDAD DEL ARCHIVO
    reader = csv.reader(file, delimiter = ',')  
    for row in reader:
        print row  # LEE ARCHIVO FORMA DE LISTA CON SUS COLUMNAS
        print row[0]   # LEE ARCHIVO CON SI FUERA CON -cat-
        print row[1]   # LEE COLUMNA 2 INDICE 1
        print row[1],row[3]
        print row[1],'-',row[3]
print 
#!/usr/bin/python
# -*- coding: utf-8 -*- 
print
print "Trabajo con -csv-reader-, -delimiter-, -quotechar- y -quoting-. Lee -Producto- y -Cantidad-."
print "Lee archivo con el modulo -csv- e imprime las filas que indico en forma normal."
print

import csv

with open("fichero_nuevo.csv", "r") as file:
    reader = csv.reader(file, delimiter=',', quotechar=',', quoting=csv.QUOTE_MINIMAL)
    for row in reader:
        print row[0]  # LEE LA COLUMNA 1 INDICE 0
        print row[1]  # IMPRIME COLUMNA 2 INDICE 1
        print row[2]  # IMPRIME COLUMNA 3 INDICE 2
        print row[2],row[3] # IMPRIME LAS DOS COLUMNAS INDICADAS
        print row[2],['-']  # IMPRIME INDICE 2 CON CORCHETES Y RAYA
        print row[1],'-',row[2] 
print 
#!/usr/bin/python
# -*- coding: utf-8 -*- 
print
print "Trabajo con -DictReader- y -delimiter-. Delimitamos columnas por nombre en lugar de indice."
print "Lee el archivo e imprime las columnas -Factura-, -Producto-, -Cantidad- y -Año-."
print

import csv

with open("fichero_nuevo.csv") as csvfile:
    reader = csv.DictReader(csvfile, delimiter = ',')  
    for row in reader:
#        print row['Factura']  # LEERA LA COLUMNA FACTURA
        print row['Factura'],'-',row['Producto'],'-',row['Cantidad'],'-',row['Ano']
print
#!/usr/bin/python
#
# NORMALMENTE FUNCIONA BIEN PERO A VECES FALLA, CREO POR EL ANCHO DE COLUMNA SEGUN EL DATO QUE METAS.
# MUCHO CUIDADO EN LAS DELIMITACIONES. SI HAS DELIMITADO TU ARCHIVO -csv- MEDIANTE (-;-) TU -delimiter- DEBERA INDICAR (-;-)
# SI LO HAS HECHO POR COMAS (-,-) EL -delimiter- DEBERA SER COMA.
print
print "Lee el archivo tabuladamente."
print

import csv

archivo = open("fichero_nuevo.csv", "rb")   
leer_archivo = csv.reader(archivo, delimiter=',')  

for fila in leer_archivo:
    print ("\t ".join(fila))    # IR PROBANDO CON LA TABULACION
    print ("  \t ".join(fila))   
    print ("  \t  ".join(fila)) # ESTA PARECE BUENA
    print ("  \t "" \t ".join(fila))  
archivo.close()

# COMO HE DICHO, DEPENDE DEL ANCHO DE LOS DATOS QUE METAS EN LAS CASILLAS

Estas son diversas formas de leer ficheros csv, desde las mas simples hasta algunas un poco mas complejas. Ya cada uno debe elegir la que se adapte a sus necesidades.