hogyan kell olvasni & elemezni CSV fájlokat Ruby

CSV jelentése “vesszővel elválasztott értékek”.

ez egy általános adatformátum, amely vesszővel elválasztott értékekből álló sorokból áll. & adatok importálására szolgál.

például:

exportálhatja Gmail-névjegyeit CSV-fájlként, és importálhatja is őket ugyanabban a formátumban.

így néz ki egy CSV fájl:

id,name1,chocolate2,bacon3,apple4,banana5,almonds

most megtudhatja, hogyan kell használni a Ruby CSV könyvtárat & CSV fájlok írására.

Ruby CSV elemzés

a Ruby beépített CSV könyvtárral rendelkezik.

közvetlenül elolvashat egy fájlt:

require 'csv'CSV.read("favorite_foods.csv")

vagy elemezhet egy karakterláncot CSV-adatokkal:

require 'csv'CSV.parse("1,chocolate\n2,bacon\n3,apple")

az eredmény?

kapsz egy kétdimenziós tömb, ahol minden bejegyzés egy sorban a táblázatban.

így néz ki:

, , , , , ]

használhatja tömb indexek, mint a data dolgozni ezeket az adatokat.

de van egy jobb út!

CSV opciók

ha a fájl fejlécekkel rendelkezik, megmondhatja a CSV elemzőnek, hogy használja őket.

table = CSV.parse(File.read("cats.csv"), headers: true)

most egy többdimenziós tömb helyett egy CSV tábla objektumot kap.

itt van a leírás:

“a CSV::Table egy kétdimenziós adatstruktúra a CSV dokumentumok ábrázolására. A táblázatok lehetővé teszik, hogy soronként vagy oszloponként dolgozzon az adatokkal, manipulálja az adatokat, sőt az eredményeket vissza is konvertálja CSV-be.”

az egyik ilyen táblázat alapján bármelyik sorból megkaphatja a szükséges adatokat.

példa:

table# "1"table# "chocolate"

itt 0 az első sor, id & name az oszlopnevek.

két táblázat mód van:

  • by_col
  • by_row

a táblázat módjának megváltoztatásával (alapértelmezés szerintrow) különböző szögekből tekintheti meg az adatokat.

például:

table.by_col# table.by_col# 

itt 0 az első oszlop, 1 a második oszlop.

ez a két módszer visszaadja a táblázat másolatát.

ha módosítani szeretné az eredeti táblázatot, akkor használhatja a by_col! & by_row! módszereket.

ez memóriahatékonyabb lesz, mivel a táblázat nem jön létre.

hogyan kell használni a CSV konvertereket

lehet, hogy észrevette, hogy a id oszlopot karakterláncok tömbjeként kaptuk.

mi van, ha egész számokra van szükségünk?

akkor kap őket hívja to_i minden húr…

de van egy parancsikont!

a Ruby CSV könyvtár megvalósítja az úgynevezett konvertereket.

a konverter automatikusan átalakítja az értékeket az Ön számára.

például:

CSV.parse("1,2,3,4,5")# ]CSV.parse("1,2,3,4,5", converters: :numeric)# ]

6 beépített átalakító van:

  • Integer
  • Float
  • numerikus (Float + Integer)
  • Dátum
  • DateTime
  • minden

de létrehozhat saját egyedi átalakítót is.

itt van, hogyan:

CSV::Converters = ->(value) { value.to_sym rescue value }

használhatja az új átalakító, mint ez:

CSV.parse("a,b,c", headers: false, converters: :symbol)# ]

új CSV-fájl létrehozása

a & CSV-fájlok különböző módon történő elemzése mellett CSV-t is létrehozhat a semmiből.

ez a könnyű út:

cats = , , ]cats.map { |c| c.join(",") }.join("\n")

használhatja a generate módszert is:

CSV.generate do |csv| csv 

This 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| csv 

Now 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 })# 

itt van egy teljesítmény-összehasonlítás:

Comparison: CSV: 112.9 i/sSmarter CSV: 21.7 i/s - 5.21x slower Tabular: 17.3 i/s - 6.52x slower

Összegzés

megtanultad, hogyan kell & CSV fájlokat írni Ruby - ban! Azt is megtudtad, hogy a & alternatív Ruby gems átalakítók feldolgozzák a CSV-adatokat.

ha nagy CSV fájlokat (> 10 MB) szeretne feldolgozni, akkor érdemes a CSV.foreach(file_name) metódust blokkokkal használni. Ez egyszerre egy sort fog olvasni & sokkal kevesebb memóriát használ.

kérjük, ossza meg ezt a cikket, hogy minél többen megtalálják!

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.