Topic: [Risolto] Calcoli da lista da file in lettura  (Letto 86 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Lukemont

  • python unicellularis
  • *
  • Post: 1
  • Punti reputazione: 0
    • Mostra profilo
[Risolto] Calcoli da lista da file in lettura
« il: Aprile 13, 2021, 22:18 »
Salve a tutti, sto imparando a usare Python (faccio il primo anno di Fisica) in un corso accademico e volevo usarlo per calcolare dei valori a partire da valori in lettura. Ho provato a fare qualcosa, ma nulla... Questo è lo stralcio di codice che ho scritto e che non so se vada bene.

fileOk = open('path/to/file/mean.txt', 'r')
fileSk = open('path/to/file/StdDev.txt', 'r')
p = 0.13
E = 100
File1 = fileOk.readline()
File2 = fileSk.readline()
Ok = float(File1)
Sk = float(File2)
Chi = 0
for i in range(9):
    while p < 0.21:
        mu = E * p
        E = E - mu
        try:
            Chi += ((Ok - E)**2)/Sk
        except ZeroDivisionError:
            Chi += 0
        File1 = fileOk.readline()
        File2 = fileSk.readline()
        Ok = float(File1)
        Sk = float(File2)
    print(p,"\t",Chi)
    p += 0.01
fileOk.close()
fileSk.close()   

Per quanto riguarda i dati in lettura sono solo una lista di float che non hanno una reale importanza in quanto al codice, senza righe vuote prima, dopo o in mezzo ai numeri.
Il problema è che mi dà questo errore:

File "path\to\file\chiquadro.py", line 36, in <module>
    Ok = float(File1)

ValueError: could not convert string to float: ''

Spero di non aver fatto cretinate e spero che vogliate aiutarmi. Grazie mille!
P.S. La versione di Python che sto utilizzando è la 3.8.5

Edit: Ora il codice funziona... semplicemente per come era impostato reiterava troppe volte la lettura da file. Scusate per l'inconveniente...
« Ultima modifica: Aprile 15, 2021, 13:32 da Lukemont »

Offline barbezuan

  • python habilis
  • **
  • Post: 61
  • Punti reputazione: 0
    • Mostra profilo
Re:Calcoli da lista da file in lettura
« Risposta #1 il: Aprile 15, 2021, 06:42 »
Allora, tu apri un file di testo e leggi riga per riga. Ok, i dati saranno graficamente numeri ma sono testo. Devi convertirli in float.

Ciao

Barbezuan

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 388
  • Punti reputazione: 0
    • Mostra profilo
Re:Calcoli da lista da file in lettura
« Risposta #2 il: Aprile 15, 2021, 07:32 »
A prescindere dalla organizzazione del codice (molto migliorabile), lo OP fa già la conversione dei dati in float ... credo che il punto si trovi sul "cosa" siano quei dati letti, basta una riga vuota per avere l'errore

Esempio : sia mean.txt
NzP:~$ cat mean.txt
1.0
1.15
1.30

2.25
1.09
NzP:~$


Leggendo e convertendo avremo
>>> with open('mean.txt') as f:
data = f.readline()
while data:
d = float(data)
print(d)
data = f.readline()


1.0
1.15
1.3
Traceback (most recent call last):
  File "<pyshell#13>", line 4, in <module>
    d = float(data)
ValueError: could not convert string to float: ''
>>>


Suggerirei di controllare i files dati.

[Edit] mi era sfuggito in prima lettura ... bisogna stare attenti con "readline()", non è che riconosca che i dati nel file sono finiti, devi effettuare un controllo su ciò che è stato letto oppure alterare la logica dello script (readlines() è una buona soluzione alternativa)
« Ultima modifica: Aprile 16, 2021, 13:41 da nuzzopippo »