Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Converteren van een SQLite tabel met Python  (gelezen 231 keer)

Offline henkoegema

  • Lid
    • PA2HO
  • Steunpunt: Nee
Converteren van een SQLite tabel met Python
« Gepost op: 2018/06/23, 12:30:57 »
In een SQLite database heb ik volgende temperaturen in een tabel (temp):

[' 22.1' ,' 19.2' ,' 22.0', ' 22.4' ,' 23.2', ' 22.4' ,' 25.3', ' 22.1' ,' 24.5' .......]

Die tabel wil en veranderen naar:

[' 22', ' 19' ,' 22', ' 22', ' 23' ,' 22', ' 25', ' 22', ' 24'  ........]

De getallen zijn niet van het type int, maar char.(string)

Wie geeft mij in tip?    ^-^

Het veranderen van de string moet gebeuren met Pyhon. (omdat de temperaturen in een grafiek moet komen (met Matplotlib))

os: Ubuntu 18.04
programmeer taal: Python.
« Laatst bewerkt op: 2018/06/23, 15:29:11 door henkoegema »
Miscere utile dulci. (Ter leering ende vermaeck)
http://www.henk.oegema.com
Registered linux user 520520.  In gebruik: Ubuntu 18.04.  Radio Amateur callsign: PA2HO Interesses: Raspberry Pi & Arduino

Offline henkoegema

  • Lid
    • PA2HO
  • Steunpunt: Nee
Re: Converteren van een SQLite tabel met Python
« Reactie #1 Gepost op: 2018/06/23, 16:15:56 »
Ik denk dat ik er uit ben.   :)

newlist = []
temp = [' 19.1', ' 20.2', ' 21.0', ' 25.4', ' 28.2', ' 30.4']

for row in temp :
    newlist.append(str(row)[0:3])

print (newlist)

Output:
[' 19', ' 20', ' 21', ' 25', ' 28', ' 30']
       
Miscere utile dulci. (Ter leering ende vermaeck)
http://www.henk.oegema.com
Registered linux user 520520.  In gebruik: Ubuntu 18.04.  Radio Amateur callsign: PA2HO Interesses: Raspberry Pi & Arduino

Offline Nunslaughter

  • Lid
    • timovwb
  • Steunpunt: Nee
Re: Converteren van een SQLite tabel met Python
« Reactie #2 Gepost op: 2018/06/23, 20:29:26 »
Uw oplossing zou kunnen falen bij temperaturen onder 10 graden. Ik zie dat er voor elk getal nog een spartie staat, misschien dat met waarden onder 10 er een extra spatie komt, geen probleem in dat geval. Maar ik zou de string splitsen op de punt en dan het eerste item pakken:

>>> "22.4".split(".")[0]
'22'
>>> l = [' 19.1', ' 20.2', ' 21.0', '9.2', ' 104.8', '        24.2']
>>> [x.split(".")[0] for x in l]
[' 19', ' 20', ' 21', '9', ' 104', '        24']
>>> # Indien de spaties ongewenst zijn en opgeschoond moeten worden:
>>> [x.split(".")[0].strip() for x in l]
['19', '20', '21', '9', '104', '24']

Op deze manier maakt het totaal niet uit hoeveel spaties of getallen elk item telt.

Offline henkoegema

  • Lid
    • PA2HO
  • Steunpunt: Nee
Re: Converteren van een SQLite tabel met Python
« Reactie #3 Gepost op: 2018/06/23, 22:19:18 »
Uw oplossing zou kunnen falen bij temperaturen onder 10 graden. Ik zie dat er voor elk getal nog een spartie staat, misschien dat met waarden onder 10 er een extra spatie komt, geen probleem in dat geval. Maar ik zou de string splitsen op de punt en dan het eerste item pakken:

>>> "22.4".split(".")[0]
'22'
>>> l = [' 19.1', ' 20.2', ' 21.0', '9.2', ' 104.8', '        24.2']
>>> [x.split(".")[0] for x in l]
[' 19', ' 20', ' 21', '9', ' 104', '        24']
>>> # Indien de spaties ongewenst zijn en opgeschoond moeten worden:
>>> [x.split(".")[0].strip() for x in l]
['19', '20', '21', '9', '104', '24']

Op deze manier maakt het totaal niet uit hoeveel spaties of getallen elk item telt.


Je hebt absoluut gelijk.
Heb het uit getest en onder 10 graden gaat het fout bij mijn oplossing.
Bedankt voor het meedenken.   :D
Zal jouw code gebruiken om het aan te passen.

(p.s. Heb  15 jaar in Belgie gewoond. (Herent). Ben nu dus  supporter van Belgie   =D)
Miscere utile dulci. (Ter leering ende vermaeck)
http://www.henk.oegema.com
Registered linux user 520520.  In gebruik: Ubuntu 18.04.  Radio Amateur callsign: PA2HO Interesses: Raspberry Pi & Arduino

Offline henkoegema

  • Lid
    • PA2HO
  • Steunpunt: Nee
Re: Converteren van een SQLite tabel met Python
« Reactie #4 Gepost op: 2018/06/24, 11:56:05 »
Uw oplossing zou kunnen falen bij temperaturen onder 10 graden. Ik zie dat er voor elk getal nog een spartie staat, misschien dat met waarden onder 10 er een extra spatie komt, geen probleem in dat geval. Maar ik zou de string splitsen op de punt en dan het eerste item pakken:

>>> "22.4".split(".")[0]
'22'
>>> l = [' 19.1', ' 20.2', ' 21.0', '9.2', ' 104.8', '        24.2']
>>> [x.split(".")[0] for x in l]
[' 19', ' 20', ' 21', '9', ' 104', '        24']
>>> # Indien de spaties ongewenst zijn en opgeschoond moeten worden:
>>> [x.split(".")[0].strip() for x in l]
['19', '20', '21', '9', '104', '24']

Op deze manier maakt het totaal niet uit hoeveel spaties of getallen elk item telt.

Ik heb toch nog een keer je hulp nodig.

Als ik je voorbeelden direct in een python prompt uitvoer gaat het goed, maar doe ik het in "IDLE", dan verandert de tabel niet.  :'(

Zie bijlage.  (Bovenste venster is de input en onderste venster de output.
Miscere utile dulci. (Ter leering ende vermaeck)
http://www.henk.oegema.com
Registered linux user 520520.  In gebruik: Ubuntu 18.04.  Radio Amateur callsign: PA2HO Interesses: Raspberry Pi & Arduino

Offline henkoegema

  • Lid
    • PA2HO
  • Steunpunt: Nee
Re: Converteren van een SQLite tabel met Python
« Reactie #5 Gepost op: 2018/06/24, 12:32:27 »
Nu heb ik het:     :D

newtemp = [x.split(".")[0].strip() for x in temp]
print (newtemp)

['19', '20', '21', '9', '104', '24']
« Laatst bewerkt op: 2018/06/24, 12:38:43 door henkoegema »
Miscere utile dulci. (Ter leering ende vermaeck)
http://www.henk.oegema.com
Registered linux user 520520.  In gebruik: Ubuntu 18.04.  Radio Amateur callsign: PA2HO Interesses: Raspberry Pi & Arduino

Offline Nunslaughter

  • Lid
    • timovwb
  • Steunpunt: Nee
Re: Converteren van een SQLite tabel met Python
« Reactie #6 Gepost op: 2018/06/24, 20:34:06 »
Klopt. Dit heet een "list comprehension" als ge er meer over wilt weten. Het maakt een nieuwe list, dus moet inderdaad aan een variabele toegewezen worden.

Uitgeschreven is dit hetzelfde als het stukje code in uw eerste post:

newtemp = [x.split(".")[0].strip() for x in temp]
# Is hetzelfde als:
newtemp = []
for x in temp:
    newtemp.append(x.split(".")[0].strip())

Offline Nero

  • Lid
  • Steunpunt: Ja
Re: Converteren van een SQLite tabel met Python
« Reactie #7 Gepost op: 2018/06/25, 15:10:09 »
Matplotlib hoeft niet noodzakelijk string values maar kan ook met nummers:
newtemp = [int(float(x)) for x in temp]Wil je toch strings:
newtemp = [f'{int(float(x))}' for x in temp]De strings in een vaste lengte (3 in dit voorbeeld):
newtemp = [f'{int(float(x)):3}' for x in temp]

Offline Nunslaughter

  • Lid
    • timovwb
  • Steunpunt: Nee
Re: Converteren van een SQLite tabel met Python
« Reactie #8 Gepost op: 2018/06/25, 20:39:01 »
Let wel dat f-strings pas vanaf Python 3.6 werken. Dus gebruikers van 14.04 en 16.04 moeten str.format() gebruiken:

['{:3}'.format(int(float(x))) for x in temp]

Offline henkoegema

  • Lid
    • PA2HO
  • Steunpunt: Nee
Re: Converteren van een SQLite tabel met Python
« Reactie #9 Gepost op: 2018/06/25, 22:22:57 »
Ik heb er weer een hoop bijgeleerd.  :)
Miscere utile dulci. (Ter leering ende vermaeck)
http://www.henk.oegema.com
Registered linux user 520520.  In gebruik: Ubuntu 18.04.  Radio Amateur callsign: PA2HO Interesses: Raspberry Pi & Arduino