Python Language
Grundläggande ingång och utgång
Sök…
Använda input () och raw_input ()
raw_input
väntar på att användaren ska skriva in text och sedan returnera resultatet som en sträng.
foo = raw_input("Put a message here that asks the user for input")
I exemplet ovan lagrar foo
vilken input användaren tillhandahåller.
input
kommer att vänta på att användaren ska mata in text och sedan returnera resultatet som en sträng.
foo = input("Put a message here that asks the user for input")
I exemplet ovan lagrar foo
vilken input användaren tillhandahåller.
Använda utskriftsfunktionen
I Python 3 är utskriftsfunktionaliteten i form av en funktion:
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.
I Python 2 var utskriften ursprungligen ett uttalande, som visas nedan.
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.
Obs from __future__ import print_function
i Python 2 gör att användare kan använda funktionen print()
på samma sätt som Python 3-koden. Detta är endast tillgängligt i Python 2.6 och högre.
Funktion för att be användaren om ett nummer
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)
Och för att använda det:
user_number = input_number("input a number: ", "that's not a number!")
Eller om du inte vill ha ett "felmeddelande":
user_number = input_number("input a number: ")
Skriva ut en sträng utan ny linje i slutet
I Python 2.x att fortsätta en rad med print
, avslutar print
uttalande med kommatecken. Det lägger automatiskt till ett utrymme.
print "Hello,",
print "World!"
# Hello, World!
I Python 3.x, den print
har funktionen en valfri end
parameter som är vad det skriver i slutet av den givna strängen. Som standard är det en newline-karaktär, så motsvarande:
print("Hello, ", end="\n")
print("World!")
# Hello,
# World!
Men du kan passera i andra strängar
print("Hello, ", end="")
print("World!")
# Hello, World!
print("Hello, ", end="<br>")
print("World!")
# Hello, <br>World!
print("Hello, ", end="BREAK")
print("World!")
# Hello, BREAKWorld!
Om du vill ha mer kontroll över utgången kan du använda sys.stdout.write
:
import sys
sys.stdout.write("Hello, ")
sys.stdout.write("World!")
# Hello, World!
Läs från stdin
Python-program kan läsas från unix-pipelines . Här är ett enkelt exempel på hur du läser från stdin
:
import sys
for line in sys.stdin:
print(line)
Var medveten om att sys.stdin
är en ström. Det betyder att for-loopen bara kommer att avslutas när strömmen har slutat.
Du kan nu leda utdata från ett annat program till ditt pythonprogram enligt följande:
$ cat myfile | python myprogram.py
I det här exemplet kan cat myfile
vara vilket som helst unix-kommando som matar ut till stdout
.
Alternativt kan du använda filinputmodulen praktiskt:
import fileinput
for line in fileinput.input():
process(line)
Inmatning från en fil
Ingången kan också läsas från filer. Filer kan öppnas med den inbyggda funktionen open
. Att använda en with <command> as <name>
syntax (kallas 'Context Manager') gör att det är enkelt att open
och få ett handtag för filen:
with open('somefile.txt', 'r') as fileobj:
# write code here using fileobj
Detta säkerställer att när kodöverföring lämnar blocket stängs filen automatiskt.
Filer kan öppnas i olika lägen. I exemplet ovan öppnas filen som skrivskyddad. För att öppna en befintlig fil för läsning, använd bara r
. Om du vill läsa den filen som byte använder du rb
. För att lägga till data till en befintlig fil använder du a
. Använd w
att skapa en fil eller skriva över befintliga filer med samma namn. Du kan använda r+
att öppna en fil för både läsning och skrivning. Det första argumentet med open()
är filnamnet, det andra är läget. Om läget lämnas tomt, kommer det att 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']
Om filstorleken är liten är det säkert att läsa hela filinnehållet i minnet. Om filen är mycket stor är det ofta bättre att läsa rad för rad eller med bitar och bearbeta ingången i samma slinga. Att göra det:
with open('shoppinglist.txt', 'r') as fileobj:
# this method reads line by line:
lines = []
for line in fileobj:
lines.append(line.strip())
När du läser filer ska du vara medveten om de operativsystemspecifika linjeavbrottstecken. Även for line in fileobj
automatiskt tar bort dem, är det alltid säkert att ringa strip()
på de lästa raderna, som det visas ovan.
Öppnade filer ( fileobj
i exemplen ovan) pekar alltid på en specifik plats i filen. När de först öppnas pekar filhandtaget till filens början, vilket är positionen 0
. Filhandtaget kan visa sin aktuella position med tell
:
fileobj = open('shoppinglist.txt', 'r')
pos = fileobj.tell()
print('We are at %u.' % pos) # We are at 0.
Efter att ha läst allt innehåll kommer filhanterarens position att pekas i slutet av filen:
content = fileobj.read()
end = fileobj.tell()
print('This file was %u characters long.' % end)
# This file was 22 characters long.
fileobj.close()
Filhanterarens position kan ställas in på vad som behövs:
fileobj = open('shoppinglist.txt', 'r')
fileobj.seek(7)
pos = fileobj.tell()
print('We are at character #%u.' % pos)
Du kan också läsa vilken längd som helst från filinnehållet under ett givet samtal. För att göra detta pass ett argument för read()
. När read()
kallas utan argument läses den förrän filens slut. Om du passerar ett argument kommer det att läsa det antalet byte eller tecken, beroende på läget ( rb
respektive 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()
För att visa skillnaden mellan tecken och 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'>