CSV înseamnă „valori separate prin virgulă”.
este un format de date comun care constă din rânduri cu valori separate prin virgule. Este folosit pentru exportul & importul de date.
de exemplu:
puteți exporta contactele Gmail ca fișier CSV și le puteți importa folosind același format.
așa arată un fișier CSV:
id,name1,chocolate2,bacon3,apple4,banana5,almonds
acum veți învăța cum să utilizați Biblioteca Ruby CSV pentru a citi & scrie fișiere CSV.
analiza Ruby CSV
Ruby vine cu o bibliotecă CSV încorporată.
puteți citi un fișier direct:
require 'csv'CSV.read("favorite_foods.csv")
sau puteți analiza un șir cu date CSV:
require 'csv'CSV.parse("1,chocolate\n2,bacon\n3,apple")
rezultatul?
obțineți o matrice bidimensională în care fiecare intrare este un rând în tabel.
se pare ca acest lucru:
, , , , , ]
puteți utiliza indici de matrice precum data
pentru a lucra cu aceste date.
dar există o cale mai bună!
opțiuni CSV
Dacă fișierul dvs. are anteturi, puteți spune analizorului CSV să le folosească.
table = CSV.parse(File.read("cats.csv"), headers: true)
acum, în loc de o matrice multidimensională, obțineți un obiect de tabel CSV.
Iată descrierea:
„a
CSV::Table
este o structură de date bidimensională pentru reprezentarea documentelor CSV. Tabelele vă permit să lucrați cu datele pe rând sau coloană, să manipulați datele și chiar să convertiți rezultatele înapoi în CSV.”
având în vedere unul dintre aceste tabele, puteți obține datele de care aveți nevoie din orice rând.
exemplu:
table# "1"table# "chocolate"
aici 0
este primul rând, id
& name
sunt numele coloanelor.
există două moduri de tabel:
- by_col
- by_row
schimbând modul Tabel (row
implicit) puteți privi datele din unghiuri diferite.
de exemplu:
table.by_col# table.by_col#
aici 0
este prima coloană, 1
este a doua coloană.
aceste două metode returnează o copie a tabelului.
dacă doriți să faceți modificări la tabelul original, atunci puteți utiliza by_col!
& by_row!
metode.
aceasta va fi mai eficientă din punct de vedere al memoriei, deoarece nu este creată nicio copie a tabelului.
cum se utilizează convertoarele CSV
este posibil să fi observat că avem coloana id
ca o serie de șiruri de caractere.
ce se întâmplă dacă avem nevoie de numere întregi?
le puteți obține apelând to_i
pe fiecare șir…
dar există o scurtătură!
Biblioteca Ruby CSV implementează ceva numit convertoare.
un convertor va transforma automat valorile pentru dvs.
de exemplu:
CSV.parse("1,2,3,4,5")# ]CSV.parse("1,2,3,4,5", converters: :numeric)# ]
există 6 convertoare încorporate:
- Integer
- Float
- Numeric (Float + Integer)
- Data
- DateTime
- toate
dar puteți crea, de asemenea, propriile convertoare personalizate.
Iată cum:
CSV::Converters = ->(value) { value.to_sym rescue value }
puteți utiliza noul dvs. convertor astfel:
CSV.parse("a,b,c", headers: false, converters: :symbol)# ]
cum se creează un nou fișier CSV
pe lângă posibilitatea de a analiza & citiți fișierele CSV în diferite moduri, puteți crea, de asemenea, un CSV de la zero.
aceasta este calea ușoară:
cats = , , ]cats.map { |c| c.join(",") }.join("\n")
de asemenea, puteți utiliza metoda 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 })#iată o comparație a performanței:
Comparison: CSV: 112.9 i/sSmarter CSV: 21.7 i/s - 5.21x slower Tabular: 17.3 i/s - 6.52x slowerrezumat
ați învățat cum să citiți & scrieți fișiere CSV în Ruby! De asemenea, ați aflat despre convertoare & pietre Ruby alternative pentru a vă procesa datele CSV.
dacă doriți să procesați fișiere CSV mari (> 10 MB), poate doriți să utilizați metoda
CSV.foreach(file_name)
cu un bloc. Acest lucru va citi un rând la un moment dat & utilizați mult mai puțină memorie.vă rugăm să partajați acest articol astfel încât mai multe persoane pot găsi!