CSV tarkoittaa ”pilkulla erotettuja arvoja”.
se on yleinen tietomuoto, joka koostuu riveistä, joiden arvot on erotettu pilkuilla. Sitä käytetään tietojen viemiseen & tuomiseen.
esimerkiksi:
voit viedä Gmail-yhteystietosi CSV-tiedostona, ja voit myös tuoda ne samassa muodossa.
tältä näyttää CSV-tiedosto:
id,name1,chocolate2,bacon3,apple4,banana5,almonds
Nyt opit käyttämään Ruby CSV-kirjastoa lukemaan & kirjoittamaan CSV-tiedostoja.
Ruby CSV jäsennys
Rubyssa on sisäänrakennettu CSV-kirjasto.
voit lukea tiedoston suoraan:
require 'csv'CSV.read("favorite_foods.csv")
tai voit jäsentää merkkijonon CSV-tiedoilla:
require 'csv'CSV.parse("1,chocolate\n2,bacon\n3,apple")
mikä oli tulos?
saadaan kaksiulotteinen joukko, jossa jokainen merkintä on yksi rivi taulukossa.
se näyttää tältä:
, , , , , ]
voit käyttää array-indeksejä, kuten data
, työstääksesi näitä tietoja.
mutta on parempikin tapa!
CSV-Asetukset
jos tiedostossasi on otsikoita, voit pyytää CSV-jäsentäjää käyttämään niitä.
table = CSV.parse(File.read("cats.csv"), headers: true)
nyt moniulotteisen matriisin sijaan saa CSV-taulukon objektin.
tässä kuvaus:
”A
CSV::Table
on kaksiulotteinen tietorakenne CSV-dokumenttien esittämiseen. Taulukoiden avulla voit käsitellä tietoja rivi-tai sarakkeittain, manipuloida tietoja ja jopa muuntaa tulokset takaisin CSV: ksi.”
koska yksi näistä taulukoista, voit saada tarvitsemasi tiedot mistä tahansa rivistä.
esimerkki:
table# "1"table# "chocolate"
tässä 0
on ensimmäinen rivi, id
& name
palstojen nimet.
taulukkomuotoja on kaksi:
- by_col
- by_row
taulukkotilaa vaihtamalla (row
oletuksena) tietoja voi tarkastella eri näkökulmista.
esimerkiksi:
table.by_col# table.by_col#
tässä 0
on ensimmäinen sarake, 1
on toinen sarake.
nämä kaksi menetelmää palauttavat kopion taulukosta.
jos haluat tehdä muutoksia alkuperäiseen taulukkoon, voit käyttää by_col!
& by_row!
menetelmiä.
tämä tulee olemaan muistitehokkaampaa, koska taulukosta ei luoda kopiota.
kuinka käyttää CSV-muuntimia
olet ehkä huomannut, että saimme id
– sarakkeemme rivistönä.
mitä jos tarvitaan kokonaislukuja?
saat ne soittamalla to_i
jokaiselle merkkijonolle …
mutta Oikotie on olemassa!
Ruby CSV-kirjasto toteuttaa jotain niin sanottuja muuntimia.
muunnin muuttaa arvot automaattisesti puolestasi.
esimerkiksi:
CSV.parse("1,2,3,4,5")# ]CSV.parse("1,2,3,4,5", converters: :numeric)# ]
on 6 sisäänrakennettu muuntimet:
- kokonaisluku
- Float
- numeerinen (Float + kokonaisluku)
- Date
- DateTime
- kaikki
mutta voit myös luoda omia muokattuja muuntimia.
näin:
CSV::Converters = ->(value) { value.to_sym rescue value }
voit käyttää uutta Muuntimen näin:
CSV.parse("a,b,c", headers: false, converters: :symbol)# ]
Kuinka luoda uusi CSV-tiedosto
sen lisäksi, että pystyy jäsentämään & lukemaan CSV-tiedostoja eri tavoin, voit myös luoda CSV: n tyhjästä.
tämä on helppo tie:
cats = , , ]cats.map { |c| c.join(",") }.join("\n")
voit käyttää myös generate
– menetelmää:
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 })#tässä suoritusvertailu:
Comparison: CSV: 112.9 i/sSmarter CSV: 21.7 i/s - 5.21x slower Tabular: 17.3 i/s - 6.52x slowerYhteenveto
olet oppinut lukemaan & kirjoittamaan CSV-tiedostoja Rubyssa! Olet myös oppinut muuntimet & vaihtoehtoisia Ruby helmiä käsitellä CSV tietoja.
jos haluat käsitellä isoja CSV-tiedostoja (> 10MB), voit käyttää
CSV.foreach(file_name)
- menetelmää lohkolla. Tämä lukee rivi kerrallaan & käytä paljon vähemmän muistia.Jaa tämä artikkeli, jotta useammat ihmiset löytävät sen!