python float()

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Oltronix
Inlägg: 408
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

python float()

Inlägg 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"]
kodar-holger
EF Sponsor
Inlägg: 916
Blev medlem: 26 maj 2014, 12:54:35
Ort: Karlskoga

Re: python float()

Inlägg av kodar-holger »

Förmodligen för att den första strängen innehåller " medan den andra inte gör det.
Användarvisningsbild
Oltronix
Inlägg: 408
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: python float()

Inlägg 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
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: python float()

Inlägg av JimmyAndersson »

Jag tror att funktionen helt enkelt även försöker konvertera citat-tecknen till float.
Så testa utan dem.
Användarvisningsbild
pi314
Inlägg: 5680
Blev medlem: 23 oktober 2021, 19:22:37
Ort: Stockholm

Re: python float()

Inlägg 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
Användarvisningsbild
Oltronix
Inlägg: 408
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: python float()

Inlägg 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
Användarvisningsbild
rvl
Inlägg: 5720
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: python float()

Inlägg av rvl »

Kod: Markera allt

print( line1[timex],float(line1[press].strip()[1:-1]))
Användarvisningsbild
Oltronix
Inlägg: 408
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: python float()

Inlägg 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
Användarvisningsbild
Oltronix
Inlägg: 408
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: python float()

Inlägg 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
guckrum
Inlägg: 1671
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: python float()

Inlägg av guckrum »

Lite mera pythoniskt?

Kod: Markera allt

with open(file, 'rt') as fh:
  for line in fh:
    line = line.rstrip('\n')
    ...
Användarvisningsbild
Oltronix
Inlägg: 408
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: python float()

Inlägg 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.
Skriv svar