Python Language
Basis invoer en uitvoer
Zoeken…
Input () en raw_input () gebruiken
raw_input
wacht tot de gebruiker tekst invoert en retourneert het resultaat als een tekenreeks.
foo = raw_input("Put a message here that asks the user for input")
In het bovenstaande voorbeeld slaat foo
de invoer op die de gebruiker levert.
input
wacht tot de gebruiker tekst invoert en retourneert vervolgens het resultaat als een tekenreeks.
foo = input("Put a message here that asks the user for input")
In het bovenstaande voorbeeld slaat foo
de invoer op die de gebruiker levert.
Gebruik van de printfunctie
In Python 3 heeft de afdrukfunctionaliteit de vorm van een functie:
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 was print oorspronkelijk een statement, zoals hieronder wordt getoond.
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.
Opmerking: met behulp from __future__ import print_function
in Python 2 kunnen gebruikers de functie print()
dezelfde manier gebruiken als de Python 3-code. Dit is alleen beschikbaar in Python 2.6 en hoger.
Functie om gebruiker om een nummer te vragen
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)
En om het te gebruiken:
user_number = input_number("input a number: ", "that's not a number!")
Of, als u geen "foutmelding" wilt:
user_number = input_number("input a number: ")
Een string afdrukken zonder een nieuwe regel aan het einde
Als u in Python 2.x een regel wilt voortzetten met print
, beëindigt u de print
met een komma. Het voegt automatisch een spatie toe.
print "Hello,",
print "World!"
# Hello, World!
In Python 3.x, de print
functie heeft een optionele end
parameter dat is wat het wordt afgedrukt aan het einde van de gegeven string. Standaard is dit een teken met een nieuwe regel, dus equivalent aan dit:
print("Hello, ", end="\n")
print("World!")
# Hello,
# World!
Maar je zou andere snaren kunnen doorgeven
print("Hello, ", end="")
print("World!")
# Hello, World!
print("Hello, ", end="<br>")
print("World!")
# Hello, <br>World!
print("Hello, ", end="BREAK")
print("World!")
# Hello, BREAKWorld!
Als u meer controle over de uitvoer wilt, kunt u sys.stdout.write
:
import sys
sys.stdout.write("Hello, ")
sys.stdout.write("World!")
# Hello, World!
Lezen van stdin
Python-programma's kunnen lezen van Unix-pijpleidingen . Hier is een eenvoudig voorbeeld van het lezen van stdin
:
import sys
for line in sys.stdin:
print(line)
Houd er rekening mee dat sys.stdin
een stream is. Het betekent dat de for-loop pas eindigt als de stream is afgelopen.
Je kunt nu de uitvoer van een ander programma als volgt naar je python-programma leiden:
$ cat myfile | python myprogram.py
In dit voorbeeld kan cat myfile
elk unix-commando zijn dat wordt uitgevoerd naar stdout
.
Als alternatief kan het gebruik van de fileinput-module handig zijn:
import fileinput
for line in fileinput.input():
process(line)
Invoer vanuit een bestand
Input kan ook worden gelezen uit bestanden. Bestanden kunnen worden geopend met de ingebouwde functie open
. Het gebruik van een with <command> as <name>
syntax (een 'Context Manager' genoemd) maakt het gebruik van open
en het verkrijgen van een handvat voor het bestand super eenvoudig:
with open('somefile.txt', 'r') as fileobj:
# write code here using fileobj
Dit zorgt ervoor dat het bestand automatisch wordt gesloten wanneer de code het blok verlaat.
Bestanden kunnen in verschillende modi worden geopend. In het bovenstaande voorbeeld wordt het bestand geopend als alleen-lezen. Gebruik r
om een bestaand bestand voor lezen te openen. Als je dat bestand als bytes wilt lezen, gebruik je rb
. Om gegevens toe te voegen aan een bestaand bestand gebruik a
. Gebruik w
om een bestand te maken of bestaande bestanden met dezelfde naam te overschrijven. U kunt r+
gebruiken om een bestand te openen voor zowel lezen als schrijven. Het eerste argument van open()
is de bestandsnaam, het tweede is de modus. Als de modus leeg is, wordt standaard 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']
Als het bestand klein is, is het veilig om de hele inhoud van het bestand in het geheugen te lezen. Als het bestand erg groot is, is het vaak beter om regel voor regel of per stuk te lezen en de invoer in dezelfde lus te verwerken. Om dat te doen:
with open('shoppinglist.txt', 'r') as fileobj:
# this method reads line by line:
lines = []
for line in fileobj:
lines.append(line.strip())
Let bij het lezen van bestanden op de besturingssysteemspecifieke regeleindetekens. Hoewel for line in fileobj
automatisch verwijdert, is het altijd veilig om strip()
op de gelezen regels aan te roepen, zoals hierboven wordt getoond.
Geopende bestanden ( fileobj
in de bovenstaande voorbeelden) wijzen altijd op een specifieke locatie in het bestand. Wanneer ze voor het eerst worden geopend, wijst de bestandsgreep naar het allereerste begin van het bestand, wat de positie 0
. De file handle kan zijn huidige positie weergeven met tell
:
fileobj = open('shoppinglist.txt', 'r')
pos = fileobj.tell()
print('We are at %u.' % pos) # We are at 0.
Na het lezen van alle inhoud wordt de positie van de bestandsbeheerder aan het einde van het bestand aangegeven:
content = fileobj.read()
end = fileobj.tell()
print('This file was %u characters long.' % end)
# This file was 22 characters long.
fileobj.close()
De positie van de file handler kan worden ingesteld op wat nodig is:
fileobj = open('shoppinglist.txt', 'r')
fileobj.seek(7)
pos = fileobj.tell()
print('We are at character #%u.' % pos)
U kunt ook elke lengte uit de bestandsinhoud lezen tijdens een bepaald gesprek. Geef hiervoor een argument door voor read()
. Wanneer read()
zonder argument wordt aangeroepen, wordt het gelezen tot het einde van het bestand. Als u een argument doorgeeft, wordt dat aantal bytes of tekens gelezen, afhankelijk van de modus (respectievelijk rb
en 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()
Om het verschil tussen tekens en bytes aan te tonen:
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'>