|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Member
Iscritto dal: Aug 2006
Messaggi: 236
|
[python] file di testo
Ciao a tutti, mi servirebbe un aiutino sull importazione di dati da un file di testo.
Innanzi tutto ecco il codice che uso per importare i dati dal file ammontare.txt che contiene solamente un numero Quote:
Come posso fare a acquisire il contenuto del file di testo direttamente come numero oppure ad acquisirlo come stringa e a convertirlo successivamente? |
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
in_file = open ("ammontare.txt")
soldi = in_file.read() in_file.close soldi = int(soldi) Se per caso il file contiene il carattere (o i caratteri) di terminazione stringa (\n per Unix, AmigaOS, o altro; \r\n per DOS, Windows; \r per MacOS), allora usa questo: in_file = open ("ammontare.txt") soldi = in_file.read() in_file.close soldi = int(soldi.strip())
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Aug 2006
Messaggi: 236
|
Quote:
|
|
|
|
|
|
|
#4 | |
|
Member
Iscritto dal: Aug 2006
Messaggi: 236
|
Quote:
x = 50 in pratica è come se non eseguisse l'operazione matematica x =((s/100)*p)+s so che c'è un errore e sarà anche una pagliacciata penso, ma non riesco proprio a trovarlo |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non mi hai scritto il risultato che ti aspettavi, ma suppongo che fosse 52.5.
Credo che il problema sia dovuto al fatto che i numeri su cui lavori sono interi, e quindi le operazioni che esegui ritornano degli interi. Ho corretto il tuo esempio e mi sono permesso di rifattorizzare il codice, in modo da renderlo più pulito e leggibile. Ecco qui: Codice:
# -*- coding: utf-8 -*-
from __future__ import with_statement
def LeggiNumeroDaFile(NomeFile):
with open(NomeFile) as File:
Stringa = File.read().strip()
return float(Stringa)
p = LeggiNumeroDaFile("interesse.txt")
s = LeggiNumeroDaFile("ammontare.txt")
x = (s / 100) * p + s
print "Attualmente sono stati prestati %s€" % s
print "Il tasso di interesse sul prestito equivale a %s%%" % p
print
print "L'importo totale da pagare e' quindi di %s€" % x
La seconda serve ad abilitare l'uso dell'istruzione with, che in Python 2.5 non è attiva di default (lo sarà a partire dalla 2.6). E' molto utile perché ti permette di lavorare su un oggetto e di assicurarsi la sua "finalizzazione" (nel caso dei file, il file viene aperto con la open, ma viene chiuso automaticamente appena si esce da blocco with; nel caso dei lock, invece, vengono acquisiti per poi essere rilasciati). Questo è modus operandi è tipico della comunità Python: le nuove funzionalità vengono introdotte in una certa versione, ma non abilitate subito. Lo saranno nella versione successiva, e in questo modo nel frattempo è possibile testare il proprio codice per vedere se funziona (con le modifiche apportate al linguaggio) o comunque per prendere confidenza (leggasi: smanettarci Poi ho definito una funzione che va a leggere da un file un valore "con la virgola" (float). Visto che hai usato due volte lo stesso codice, ho preferito rifattorizzare (ed è un consiglio che ti suggerisco di seguire sempre anche tu), rendendo anche il codice più pulito e facile da leggere. Infine nelle varie print ho usato l'operatore % che serve a sostituire dei valori (presenti a destra; in questo caso soltanto uno) a una stringa che rappresenta un template (che sta a sinistra; i parametri del template sono introdotti dal simbolo %; nel caso in cui fosse necessario stampare proprio questo carattere, è sufficiente ripeterlo due volte, come ho fatto). Penso sia tutto. Se ci sono altri problemi, fammi sapere.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys Ultima modifica di cdimauro : 12-01-2008 alle 08:15. |
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Aug 2006
Messaggi: 236
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:20.




















