Python Language
Input e output di base
Ricerca…
Utilizzo di input () e raw_input ()
raw_input
attenderà che l'utente inserisca del testo e restituisca il risultato come una stringa.
foo = raw_input("Put a message here that asks the user for input")
Nell'esempio precedente foo
memorizzerà qualsiasi input fornito dall'utente.
input
attenderà che l'utente inserisca il testo e quindi restituisca il risultato come una stringa.
foo = input("Put a message here that asks the user for input")
Nell'esempio precedente foo
memorizzerà qualsiasi input fornito dall'utente.
Utilizzando la funzione di stampa
In Python 3, la funzionalità di stampa ha la forma di una funzione:
print("This string will be displayed in the output")
# This string will be displayed in the output
print("You can print \n escape characters too.")
# You can print escape characters too.
In Python 2, la stampa era in origine una dichiarazione, come mostrato di seguito.
print "This string will be displayed in the output"
# This string will be displayed in the output
print "You can print \n escape characters too."
# You can print escape characters too.
Nota: l'utilizzo from __future__ import print_function
in Python 2 consentirà agli utenti di utilizzare la funzione print()
come nel codice Python 3. Questo è disponibile solo in Python 2.6 e versioni successive.
Funzione per richiedere all'utente un numero
def input_number(msg, err_msg=None):
while True:
try:
return float(raw_input(msg))
except ValueError:
if err_msg is not None:
print(err_msg)
def input_number(msg, err_msg=None):
while True:
try:
return float(input(msg))
except ValueError:
if err_msg is not None:
print(err_msg)
E per usarlo:
user_number = input_number("input a number: ", "that's not a number!")
Oppure, se non vuoi un "messaggio di errore":
user_number = input_number("input a number: ")
Stampa una stringa senza una nuova riga alla fine
In Python 2.x, per continuare una riga con la print
, terminare l'istruzione di print
con una virgola. Aggiungerà automaticamente uno spazio.
print "Hello,",
print "World!"
# Hello, World!
In Python 3.x, la funzione di print
ha un parametro end
opzionale che è ciò che stampa alla fine della stringa specificata. Di default è un carattere di nuova riga, quindi equivalente a questo:
print("Hello, ", end="\n")
print("World!")
# Hello,
# World!
Ma potresti passare in altre stringhe
print("Hello, ", end="")
print("World!")
# Hello, World!
print("Hello, ", end="<br>")
print("World!")
# Hello, <br>World!
print("Hello, ", end="BREAK")
print("World!")
# Hello, BREAKWorld!
Se vuoi un maggiore controllo sull'output, puoi usare sys.stdout.write
:
import sys
sys.stdout.write("Hello, ")
sys.stdout.write("World!")
# Hello, World!
Leggi da stdin
I programmi Python possono leggere da pipeline unix . Ecco un semplice esempio su come leggere da stdin
:
import sys
for line in sys.stdin:
print(line)
Essere consapevoli del fatto che sys.stdin
è un flusso. Significa che il ciclo for terminerà solo al termine dello stream.
Ora puoi reindirizzare l'output di un altro programma nel tuo programma python come segue:
$ cat myfile | python myprogram.py
In questo esempio cat myfile
può essere un qualsiasi comando unix che esce stdout
.
In alternativa, l'uso del modulo fileinput può tornare utile:
import fileinput
for line in fileinput.input():
process(line)
Input da un file
L'input può anche essere letto dai file. I file possono essere aperti utilizzando la funzione integrata open
. L'utilizzo di un with <command> as <name>
sintassi with <command> as <name>
(chiamato "Gestore del contesto") rende l'uso di open
e ottenere un handle per il file super facile:
with open('somefile.txt', 'r') as fileobj:
# write code here using fileobj
Ciò garantisce che quando l'esecuzione del codice lascia il blocco, il file viene automaticamente chiuso.
I file possono essere aperti in diverse modalità. Nell'esempio sopra il file è aperto in sola lettura. Per aprire un file esistente per la sola lettura usa r
. Se vuoi leggere quel file come byte usa rb
. Per aggiungere dati a un file esistente, utilizzare a
. Usa w
per creare un file o sovrascrivere qualsiasi file esistente con lo stesso nome. Puoi usare r+
per aprire un file sia per la lettura che per la scrittura. Il primo argomento di open()
è il nome del file, il secondo è la modalità. Se la modalità viene lasciata vuota, verrà impostata su r
.
# let's create an example file:
with open('shoppinglist.txt', 'w') as fileobj:
fileobj.write('tomato\npasta\ngarlic')
with open('shoppinglist.txt', 'r') as fileobj:
# this method makes a list where each line
# of the file is an element in the list
lines = fileobj.readlines()
print(lines)
# ['tomato\n', 'pasta\n', 'garlic']
with open('shoppinglist.txt', 'r') as fileobj:
# here we read the whole content into one string:
content = fileobj.read()
# get a list of lines, just like int the previous example:
lines = content.split('\n')
print(lines)
# ['tomato', 'pasta', 'garlic']
Se la dimensione del file è minuscola, è sicuro leggere l'intero contenuto del file in memoria. Se il file è molto grande, spesso è meglio leggere riga per riga o blocchi e elaborare l'input nello stesso ciclo. Fare quello:
with open('shoppinglist.txt', 'r') as fileobj:
# this method reads line by line:
lines = []
for line in fileobj:
lines.append(line.strip())
Durante la lettura dei file, prestare attenzione ai caratteri di interruzione di riga specifici del sistema operativo. Anche se for line in fileobj
le for line in fileobj
automaticamente, è sempre possibile chiamare strip()
sulle righe lette, come mostrato sopra.
I file aperti ( fileobj
negli esempi precedenti) indicano sempre una posizione specifica nel file. Quando vengono aperti per la prima volta, il file handle punta all'inizio del file, che è la posizione 0
. L'handle del file può visualizzare la posizione corrente con tell
:
fileobj = open('shoppinglist.txt', 'r')
pos = fileobj.tell()
print('We are at %u.' % pos) # We are at 0.
Dopo aver letto tutto il contenuto, la posizione del gestore file sarà indicata alla fine del file:
content = fileobj.read()
end = fileobj.tell()
print('This file was %u characters long.' % end)
# This file was 22 characters long.
fileobj.close()
La posizione del gestore file può essere impostata su qualsiasi cosa sia necessaria:
fileobj = open('shoppinglist.txt', 'r')
fileobj.seek(7)
pos = fileobj.tell()
print('We are at character #%u.' % pos)
Puoi anche leggere qualsiasi lunghezza dal contenuto del file durante una determinata chiamata. Per fare questo passare un argomento per read()
. Quando read()
viene chiamato senza argomento, leggerà fino alla fine del file. Se passi un argomento leggerà quel numero di byte o caratteri, a seconda della modalità (rispettivamente rb
e r
):
# reads the next 4 characters
# starting at the current position
next4 = fileobj.read(4)
# what we got?
print(next4) # 'cucu'
# where we are now?
pos = fileobj.tell()
print('We are at %u.' % pos) # We are at 11, as we was at 7, and read 4 chars.
fileobj.close()
Per dimostrare la differenza tra caratteri e byte:
with open('shoppinglist.txt', 'r') as fileobj:
print(type(fileobj.read())) # <class 'str'>
with open('shoppinglist.txt', 'rb') as fileobj:
print(type(fileobj.read())) # <class 'bytes'>