Sida 1 av 1

python float()

Postat: 25 april 2022, 18:43:18
av Oltronix
Varför fungerar inte detta?

Kod: Markera allt

import time
file = 'bme280.dat'
#file = 'd1.dat'
press = 3
timex = 0
f1 = open(file, 'r')
while True:
    line = f1.readline()
    if line == '':    #test EOF
        f1.close()
        print('EOF')
        exit()
    #print(line)
    line1 = line.split(',')
    #print(line1)
    print(type(line1[press]))
    print( line1[timex],line1[press])
    print( line1[timex],float(line1[press]))
    time.sleep(2)
Output:

Kod: Markera allt

pi@mumin3:~/pigpio $ python3 read_d1_2.py 
<class 'str'>
["Mon Apr 25 16:39:22 2022"  "1010.58"
Traceback (most recent call last):
  File "read_d1_2.py", line 18, in <module>
    print( line1[timex],float(line1[press]))
ValueError: could not convert string to float: ' "1010.58"'
Men detta:

Kod: Markera allt

pi@mumin3:~/pigpio $ python3
Python 3.5.3 (default, Nov 18 2020, 21:09:16) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s="1010.58"
>>> float(s)
1010.58
>>> 
bme280.dat

Kod: Markera allt

["Mon Apr 25 18:19:30 2022", "25.14", "20.28", "1010.59", "21.88"]
["Mon Apr 25 18:24:31 2022", "25.17", "20.67", "1010.50", "22.40"]
["Mon Apr 25 18:29:31 2022", "25.07", "20.84", "1010.50", "22.33"]
["Mon Apr 25 18:34:32 2022", "25.04", "21.06", "1010.52", "22.08"]

Re: python float()

Postat: 25 april 2022, 18:45:29
av kodar-holger
Förmodligen för att den första strängen innehåller " medan den andra inte gör det.

Re: python float()

Postat: 25 april 2022, 19:05:05
av Oltronix
Hmm
print(type(line1[press]))
print(line1[press])
leverar detta:
<class 'str'>
"1010.58"
Känns väldigt mkt som en sträng

Re: python float()

Postat: 25 april 2022, 19:17:41
av JimmyAndersson
Jag tror att funktionen helt enkelt även försöker konvertera citat-tecknen till float.
Så testa utan dem.

Re: python float()

Postat: 25 april 2022, 19:23:20
av pi314
Programmet ser ut att vilja ha data i det här formatet.

Kod: Markera allt

Mon Apr 25 18:19:30 2022,25.14,20.28,1010.59,21.88
Mon Apr 25 18:24:31 2022,25.17,20.67,1010.50,22.40
Mon Apr 25 18:29:31 2022,25.07,20.84,1010.50,22.33
Mon Apr 25 18:34:32 2022,25.04,21.06,1010.52,22.08
/Pi

Re: python float()

Postat: 25 april 2022, 19:36:26
av Oltronix
Problemet är att jag har dubbla fnuttar.
Så här:
' "1010.34" '
Jag får se till att få bort en uppsättning fnuttar. Jag kanske använder split() på fel sätt

Re: python float()

Postat: 25 april 2022, 19:36:36
av rvl

Kod: Markera allt

print( line1[timex],float(line1[press].strip()[1:-1]))

Re: python float()

Postat: 25 april 2022, 19:37:39
av Oltronix
pi314 skrev: 25 april 2022, 19:23:20 Programmet ser ut att vilja ha data i det här formatet.

Kod: Markera allt

Mon Apr 25 18:19:30 2022,25.14,20.28,1010.59,21.88
Mon Apr 25 18:24:31 2022,25.17,20.67,1010.50,22.40
Mon Apr 25 18:29:31 2022,25.07,20.84,1010.50,22.33
Mon Apr 25 18:34:32 2022,25.04,21.06,1010.52,22.08
/Pi
Japp så är det

Re: python float()

Postat: 25 april 2022, 19:49:06
av Oltronix
rvl skrev: 25 april 2022, 19:36:36

Kod: Markera allt

print( line1[timex],float(line1[press].strip()[1:-1]))
Fungerar perfekt. Man får tacka och buga

Re: python float()

Postat: 25 april 2022, 21:11:35
av guckrum
Lite mera pythoniskt?

Kod: Markera allt

with open(file, 'rt') as fh:
  for line in fh:
    line = line.rstrip('\n')
    ...

Re: python float()

Postat: 27 april 2022, 09:43:01
av Oltronix
guckrum>
Done!
Snyggare och man får automatiskt close()
------
[2:-1] känndes som ett hack här och att jag fixade till något osnyggt.
Jag använde 'json.dump(l, f)' bara för att få en sträng för att kunna skriva ut till file. Detta utan tänka/fatta vad jag höll på med.
Att nått ser ut som en lista betyder int att det är det. [a, "b"] kan vara en sträng på 8 tecken inte en lista på 2 enheter.

Tack för alla bidragen som fick mig att lösa upp mitt tänkande som hade låst sig.