V jazyce Python můžete snadno číst a zapisovat soubory csv pomocí standardního modulu csv.
Předpokládejme například, že máte následující soubor csv, sample.csv.
11,12,13,14
21,22,23,24
31,32,33,34
To lze vyložit následovně.
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']
Zde je třeba dávat pozor na to, zda je za čárkou mezera. Za normálních okolností by za čárkou neměly být žádné zbytečné mezery, ale někdy se setkávám se soubory, ve kterých mezery jsou.
V takových případech se ve výchozím nastavení bílé znaky neberou v úvahu a soubor se čte tak, jak je.
11, 12, 13, 14
21, 22, 23, 24
31, 32, 33, 34
Jinými slovy, pokud výše uvedený soubor přečtete s čárkou následovanou mezerou, bude výstup vypadat takto
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']
Pokud v souboru csv.reader zadáte následující údaje, budou mezery za čárkou vynechány.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']
V jednoduchém příkladu, jako je ten výše uvedený, můžete použít funkci strip() k odstranění bílých znaků. Problém nastává, když je obklopen dvojitými uvozovkami, jako je tomu v následujícím případě.
"one,one", "two,two", "three,three"
Část ohraničená dvojitými uvozovkami by měla být považována za jeden prvek, ale pokud je skipinitialspace=False (výchozí nastavení), bude vypadat následovně.
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"']
To lze provést nastavením 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']
Totéž platí při čtení souboru csv pomocí funkce read_csv() v programu pandas. Pokud má soubor csv za čárkou mezeru, můžete postupovat následovně.read_csv(skipinitialspace=True)