Nieuws:

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

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

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://henk.oegema.com  (On RaspberryPi2)
Registered linux user 520520.  In gebruik: Ubuntu  22.04.3 Hobby's: Radio Amateur callsign: PA2HO.  Interesses: Raspberry Pi & Arduino & Jetson Nano (voor AI & ML)

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://henk.oegema.com  (On RaspberryPi2)
Registered linux user 520520.  In gebruik: Ubuntu  22.04.3 Hobby's: Radio Amateur callsign: PA2HO.  Interesses: Raspberry Pi & Arduino & Jetson Nano (voor AI & ML)

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.

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://henk.oegema.com  (On RaspberryPi2)
Registered linux user 520520.  In gebruik: Ubuntu  22.04.3 Hobby's: Radio Amateur callsign: PA2HO.  Interesses: Raspberry Pi & Arduino & Jetson Nano (voor AI & ML)

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://henk.oegema.com  (On RaspberryPi2)
Registered linux user 520520.  In gebruik: Ubuntu  22.04.3 Hobby's: Radio Amateur callsign: PA2HO.  Interesses: Raspberry Pi & Arduino & Jetson Nano (voor AI & ML)

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://henk.oegema.com  (On RaspberryPi2)
Registered linux user 520520.  In gebruik: Ubuntu  22.04.3 Hobby's: Radio Amateur callsign: PA2HO.  Interesses: Raspberry Pi & Arduino & Jetson Nano (voor AI & ML)

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
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]

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]

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://henk.oegema.com  (On RaspberryPi2)
Registered linux user 520520.  In gebruik: Ubuntu  22.04.3 Hobby's: Radio Amateur callsign: PA2HO.  Interesses: Raspberry Pi & Arduino & Jetson Nano (voor AI & ML)