En Python, puedes leer y escribir fácilmente archivos csv utilizando el módulo estándar csv.
Por ejemplo, suponga que tiene el siguiente csv, sample.csv.
11,12,13,14
21,22,23,24
31,32,33,34
Esto puede leerse como sigue.
import csv
with open('data/src/sample.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
# ['11', '12', '13', '14']
# ['21', '22', '23', '24']
# ['31', '32', '33', '34']
Lo que hay que tener cuidado aquí es cuando hay un espacio después de la coma. Normalmente, no debería haber espacios innecesarios después de la coma, pero a veces veo archivos con espacios.
En estos casos, por defecto, los espacios en blanco no se ignoran y el archivo se lee tal cual.
11, 12, 13, 14
21, 22, 23, 24
31, 32, 33, 34
En otras palabras, si se lee el archivo anterior con una coma seguida de un espacio, la salida será la siguiente
with open('data/src/sample_space.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
# ['11', ' 12', ' 13', ' 14']
# ['21', ' 22', ' 23', ' 24']
# ['31', ' 32', ' 33', ' 34']
Si especifica lo siguiente en csv.reader, los espacios después de la coma se omitirán.skipinitialspace=True
with open('data/src/sample_space.csv', 'r') as f:
reader = csv.reader(f, skipinitialspace=True)
for row in reader:
print(row)
# ['11', '12', '13', '14']
# ['21', '22', '23', '24']
# ['31', '32', '33', '34']
En un ejemplo sencillo como el anterior, puede utilizar strip() para eliminar los espacios en blanco. El problema es cuando está rodeado de comillas dobles como el siguiente.
"one,one", "two,two", "three,three"
La parte rodeada de comillas dobles debe considerarse como un solo elemento, pero si skipinitialspace=False (el valor predeterminado), tendrá el siguiente aspecto.
with open('data/src/sample_double_quotation.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
# ['one,one', ' "two', 'two"', ' "three', 'three"']
Esto puede hacerse estableciendo skipinitialspace=True.
with open('data/src/sample_double_quotation.csv', 'r') as f:
reader = csv.reader(f, skipinitialspace=True)
for row in reader:
print(row)
# ['one,one', 'two,two', 'three,three']
Lo mismo ocurre al leer un fichero csv con read_csv() en pandas. Si el archivo csv tiene un espacio después de la coma, puede hacer lo siguiente.read_csv(skipinitialspace=True)