CSV znamená „hodnoty oddělené čárkami“.
je to běžný datový formát, který se skládá z řádků s hodnotami oddělenými čárkami. Používá se pro export & import dat.
například:
kontakty Gmailu můžete exportovat jako soubor CSV a můžete je také importovat pomocí stejného formátu.
takto vypadá soubor CSV:
id,name1,chocolate2,bacon3,apple4,banana5,almonds
nyní se naučíte, jak používat knihovnu Ruby CSV ke čtení & psát soubory CSV.
Ruby CSV Parsing
Ruby je dodáván s vestavěnou knihovnou CSV.
soubor si můžete přečíst přímo:
require 'csv'CSV.read("favorite_foods.csv")
nebo můžete analyzovat řetězec s daty CSV:
require 'csv'CSV.parse("1,chocolate\n2,bacon\n3,apple")
výsledek?
získáte dvourozměrné pole, kde každá položka je jeden řádek v tabulce.
vypadá to takto:
, , , , , ]
pro práci s těmito daty můžete použít indexy pole jako data
.
ale existuje lepší způsob!
možnosti CSV
pokud má váš soubor záhlaví, můžete říct analyzátoru CSV, aby je použil.
table = CSV.parse(File.read("cats.csv"), headers: true)
nyní místo vícerozměrného pole získáte objekt tabulky CSV.
zde je popis:
“
CSV::Table
je dvourozměrná datová struktura pro reprezentaci dokumentů CSV. Tabulky umožňují pracovat s daty podle řádku nebo sloupce, manipulovat s daty a dokonce převádět výsledky zpět do formátu CSV.“
vzhledem k jedné z těchto tabulek můžete získat potřebná data z libovolného řádku.
Příklad:
table# "1"table# "chocolate"
Zde 0
je první řádek, id
& name
jsou názvy sloupců.
existují dva režimy tabulky:
- by_col
- by_row
změnou režimu tabulky (row
ve výchozím nastavení), můžete se podívat na data z různých úhlů.
například:
table.by_col# table.by_col#
Zde 0
první sloupec 1
je druhý sloupec.
tyto dvě metody vrátí kopii tabulky.
pokud chcete provést změny v původní tabulce, můžete použít metody by_col!
& by_row!
.
to bude více paměti efektivní, protože žádná kopie tabulky je vytvořena.
jak používat převaděče CSV
možná jste si všimli, že jsme dostali náš sloupec id
jako pole řetězců.
co když potřebujeme celá čísla?
můžete je získat voláním to_i
na každém řetězci …
ale existuje zkratka!
Knihovna Ruby CSV implementuje něco, co se nazývá konvertory.
převodník automaticky převede hodnoty za vás.
například:
CSV.parse("1,2,3,4,5")# ]CSV.parse("1,2,3,4,5", converters: :numeric)# ]
k dispozici je 6 vestavěných převodníků:
- Integer
- Float
- Numeric (Float + celé Číslo)
- Datum
- DateTime
Ale můžete si také vytvořit svůj vlastní konvertory.
Zde je návod, jak:
CSV::Converters = ->(value) { value.to_sym rescue value }
můžete použít svůj nový katalyzátor, jako je tento:
CSV.parse("a,b,c", headers: false, converters: :symbol)# ]
Jak Vytvořit Nový Soubor CSV
Na vrcholu je schopen analyzovat & čtení CSV souborů v různých způsobů, jak můžete také vytvořit CSV od nuly.
to je snadný způsob, jak:
cats = , , ]cats.map { |c| c.join(",") }.join("\n")
můžete také použít metodu generate
:
CSV.generate do |csv| csvThis prepares the data to be in the right format.
If you want to write to a file you'll have to use something like , or instead of you can use with a file name & write mode enabled.
CSV.open("cats.csv", "w") do |csv| csvNow you have a new CSV file!
CSV Gems & Performance
The built-in library is fine & it will get the job done.
But you can also find a few CSV parsing gems with different features.
For example, the gem will convert your CSV data into an array of hashes.
Example:
require 'smarter_csv'IntegerConverter = Object.newdef IntegerConverter.convert(value) Integer(value)endSmarterCSV.process('testing.csv', value_converters: { id: IntegerConverter })#zde je srovnání výkonu:
Comparison: CSV: 112.9 i/sSmarter CSV: 21.7 i/s - 5.21x slower Tabular: 17.3 i/s - 6.52x slowershrnutí
naučili jste se číst & psát soubory CSV v Ruby! Také jste se dozvěděli o konvertorech & alternativní Ruby drahokamy pro zpracování vašich dat CSV.
pokud chcete zpracovávat velké soubory CSV (> 10 MB), můžete použít metodu
CSV.foreach(file_name)
s blokem. To bude číst jeden řádek v době & použít mnohem méně paměti.prosím, sdílejte tento článek, aby ho mohlo najít více lidí!