En Python, pode ler e escribir facilmente ficheiros csv usando o módulo csv estándar.
Por exemplo, supoña que tes o seguinte csv, sample.csv.
11,12,13,14
21,22,23,24
31,32,33,34
Isto pódese ler do seguinte xeito.
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']
O que tes que ter coidado aquí é cando hai un espazo despois da coma. Normalmente, non debería haber espazos innecesarios despois da coma, pero ás veces vexo ficheiros con espazos neles.
Nestes casos, de forma predeterminada, os espazos en branco non se ignoran e o ficheiro lese como está.
11, 12, 13, 14
21, 22, 23, 24
31, 32, 33, 34
Noutras palabras, se le o ficheiro anterior cunha coma seguida dun espazo, a saída será a seguinte
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']
Se especificas o seguinte en csv.reader, omitiranse os espazos despois da coma.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']
Nun exemplo sinxelo como o anterior, podes usar strip() para eliminar o espazo en branco. O problema é cando está rodeado de comiñas dobres como a seguinte.
"one,one", "two,two", "three,three"
A parte rodeada de comiñas dobres debe considerarse como un só elemento, pero se skipinitialspace=False (o predeterminado), terá o seguinte 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"']
Isto pódese facer configurando 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']
O mesmo ocorre cando se le un ficheiro csv con read_csv() en pandas. Se o ficheiro csv ten un espazo despois da coma, podes facer o seguinte.read_csv(skipinitialspace=True)