Kirjoittaja Aihe: CSV-datatiedoston muunto  (Luettu 3592 kertaa)

jarmala

  • Käyttäjä
  • Viestejä: 789
    • Profiili
CSV-datatiedoston muunto
« : 26.10.22 - klo:12.56 »
Ilmatieteen laitokselta voi imuttaa haluamansa tyyppisen kokelman mittaustuloksia. Kiinnosti lämpötila ja tuuli. Tulee seuraavanlainen csv-tiedosto:

Koodia: [Valitse]
2021,1,1,12:00:00 ap.,"UTC","-0,6","2,8"
2021,1,1,01:00:00 ap.,"UTC","-0,9","3,8"
2021,1,1,02:00:00 ap.,"UTC","-1,3","3,7"
2021,1,1,03:00:00 ap.,"UTC","-1,6",3
2021,1,1,04:00:00 ap.,"UTC","-1,6","3,6"
2021,1,1,05:00:00 ap.,"UTC","-1,9","3,8"
2021,1,1,06:00:00 ap.,"UTC","-1,9","3,7"

Tarkoitus olisi usuttaa gnuplot tuon kimppuun, mutta kun siinä on sekä erotinmerkki pilkku ja myös desimaali on pilkku. Miten vaihdan erotinpilkut tabeiksi ilman että desimaalipilkut muuttuvat myös? tr vaihtaa ne molemmat, mutta sediä tai awkia en osaa. Keinoni eivät ihan riitä. Ja noita rivejä on paljon eli jokin suodatin siihen pitäisi rakentaa... Pitääkö ruveta opettelemaan awkia? Vai sediä?

 
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Vs: CSV-datatiedoston muunto
« Vastaus #1 : 26.10.22 - klo:13.01 »
LibreOffice Calc pystyy lukemaan nuo oikein. Osaiskohan se sylkäistä ulos eri erottimen?

Snufkin

  • Käyttäjä
  • Viestejä: 454
    • Profiili
Vs: CSV-datatiedoston muunto
« Vastaus #2 : 26.10.22 - klo:13.24 »
Python-kurssi tarjosi tällaista vaihtoehtoa. Tuo csv-reader osaa erottaa kuuluuko erotinmerkki dataan tai ei.

Koodia: [Valitse]
import csv

with open("testi.csv") as tiedosto:
    for rivi in csv.reader(tiedosto, delimiter=";"):
        print(rivi)

https://ohjelmointi-22.mooc.fi/osa-7/4-datan-kasittely
Xubuntu 22.04 LTS, Fujitsu Lifebook E754

kuutio

  • Käyttäjä
  • Viestejä: 162
    • Profiili
Vs: CSV-datatiedoston muunto
« Vastaus #3 : 26.10.22 - klo:13.39 »
Onnistuu myös vaikka csvtool:lla (asennettavissa repoista)
Koodia: [Valitse]
csvtool -t COMMA -u TAB cat muokattava_tiedosto -o muokattu_tiedostotulos:
Koodia: [Valitse]
2021    1       1       12:00:00 ap.    UTC     -0,6    2,8
2021    1       1       01:00:00 ap.    UTC     -0,9    3,8
2021    1       1       02:00:00 ap.    UTC     -1,3    3,7
2021    1       1       03:00:00 ap.    UTC     -1,6    3
2021    1       1       04:00:00 ap.    UTC     -1,6    3,6
2021    1       1       05:00:00 ap.    UTC     -1,9    3,8
2021    1       1       06:00:00 ap.    UTC     -1,9    3,7
« Viimeksi muokattu: 26.10.22 - klo:13.45 kirjoittanut kuutio »

jarmala

  • Käyttäjä
  • Viestejä: 789
    • Profiili
Vs: CSV-datatiedoston muunto
« Vastaus #4 : 27.10.22 - klo:00.22 »
Onnistuu myös vaikka csvtool:lla (asennettavissa repoista)
Koodia: [Valitse]
csvtool -t COMMA -u TAB cat muokattava_tiedosto -o muokattu_tiedosto

Hienoa! Pitääkin kokeilla heti...
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

ilkant

  • Käyttäjä
  • Viestejä: 1380
  • Kubuntu
    • Profiili
Vs: CSV-datatiedoston muunto
« Vastaus #5 : 31.10.22 - klo:01.52 »
Jotenkin muistui takavuosilta *nixin komento awk. Linux antoi mawk:n manuaalin, josta kopioin kaksi alkuosaa:

Koodia: [Valitse]
NAME
       mawk - pattern scanning and text processing language

SYNOPSIS
       mawk [-W option] [-F value] [-v var=value] [--] 'program text' [file ...]
       mawk [-W option] [-F value] [-v var=value] [-f program-file] [--] [file ...]

kuutio

  • Käyttäjä
  • Viestejä: 162
    • Profiili
Vs: CSV-datatiedoston muunto
« Vastaus #6 : 01.11.22 - klo:09.21 »
Jotenkin muistui takavuosilta *nixin komento awk. Linux antoi mawk:n manuaalin, josta kopioin kaksi alkuosaa:
Onnistuu toki myös awk:lla (ja senkin käyttö kannattaa ilman muuta opetella), mutta dedikoiduilla työkaluilla ei tarvitse keksiä pyörää uudestaan.

csvtool (muitakin vastaavia löytyy) on ihan näppärä monitoimityökalu csv-tiedostojen käsittelyyn, eikä tarvitse joka kerta miettiä, mitenhän tän nyt tekisi (esim. awkilla)