Python Language
Podstawowe wejście i wyjście
Szukaj…
Korzystanie z input () i raw_input ()
raw_input
będzie czekać na wprowadzenie tekstu przez użytkownika, a następnie zwróci wynik jako ciąg znaków.
foo = raw_input("Put a message here that asks the user for input")
W powyższym przykładzie foo
zapisze dane wprowadzone przez użytkownika.
input
będzie czekać, aż użytkownik wprowadzi tekst, a następnie zwróci wynik jako ciąg.
foo = input("Put a message here that asks the user for input")
W powyższym przykładzie foo
zapisze dane wprowadzone przez użytkownika.
Korzystanie z funkcji drukowania
W Pythonie 3 funkcja drukowania ma postać funkcji:
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.
W Pythonie 2 print było pierwotnie instrukcją, jak pokazano poniżej.
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.
Uwaga: użycie from __future__ import print_function
w Pythonie 2 pozwoli użytkownikom na użycie funkcji print()
tak samo jak kodu Pythona 3. Jest to dostępne tylko w Pythonie 2.6 i nowszych.
Funkcja monitująca użytkownika o numer
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)
I aby go użyć:
user_number = input_number("input a number: ", "that's not a number!")
Lub jeśli nie chcesz wyświetlać „komunikatu o błędzie”:
user_number = input_number("input a number: ")
Drukowanie łańcucha bez znaku nowej linii na końcu
W Pythonie 2.x, aby kontynuować linię z print
, zakończ instrukcję print
przecinkiem. Automatycznie doda spację.
print "Hello,",
print "World!"
# Hello, World!
W Pythonie 3.x funkcja print
ma opcjonalny parametr end
, który jest drukowany na końcu podanego ciągu. Domyślnie jest to znak nowej linii, więc równoważny z tym:
print("Hello, ", end="\n")
print("World!")
# Hello,
# World!
Ale możesz podać inne łańcuchy
print("Hello, ", end="")
print("World!")
# Hello, World!
print("Hello, ", end="<br>")
print("World!")
# Hello, <br>World!
print("Hello, ", end="BREAK")
print("World!")
# Hello, BREAKWorld!
Jeśli chcesz mieć większą kontrolę nad danymi wyjściowymi, możesz użyć sys.stdout.write
:
import sys
sys.stdout.write("Hello, ")
sys.stdout.write("World!")
# Hello, World!
Czytaj ze standardowego
Programy w języku Python mogą odczytywać z potoków unix . Oto prosty przykład, jak czytać ze stdin
:
import sys
for line in sys.stdin:
print(line)
Pamiętaj, że sys.stdin
jest strumieniem. Oznacza to, że pętla for zakończy się dopiero po zakończeniu strumienia.
Możesz teraz potokować dane wyjściowe innego programu do swojego programu python w następujący sposób:
$ cat myfile | python myprogram.py
W tym przykładzie cat myfile
może być dowolnym poleceniem uniksowym, które wypisuje na standardowe stdout
.
Alternatywnie, przydatne może być użycie modułu fileinput :
import fileinput
for line in fileinput.input():
process(line)
Dane wejściowe z pliku
Dane wejściowe można również odczytać z plików. Pliki można otwierać za pomocą wbudowanej funkcji open
. Używanie with <command> as <name>
składnią with <command> as <name>
(zwaną „Context Manager”) sprawia, że korzystanie z open
i uzyskiwania uchwytu dla pliku jest bardzo łatwe:
with open('somefile.txt', 'r') as fileobj:
# write code here using fileobj
Zapewnia to, że gdy wykonanie kodu opuści blok, plik zostanie automatycznie zamknięty.
Pliki można otwierać w różnych trybach. W powyższym przykładzie plik jest otwierany jako tylko do odczytu. Aby otworzyć istniejący plik tylko do odczytu, użyj r
. Jeśli chcesz odczytać ten plik jako bajty, użyj rb
. Aby dodać dane do istniejącego użytkowania plik a
. Użyj w
aby utworzyć plik lub zastąpić istniejące pliki o tej samej nazwie. Możesz użyć r+
aby otworzyć plik do odczytu i zapisu. Pierwszy argument open()
to nazwa pliku, drugi to tryb. Jeśli tryb pozostanie pusty, domyślnie 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']
Jeśli rozmiar pliku jest niewielki, można bezpiecznie wczytać całą zawartość pliku do pamięci. Jeśli plik jest bardzo duży, często lepiej jest czytać wiersz po wierszu lub fragmenty i przetwarzać dane wejściowe w tej samej pętli. Aby to zrobić:
with open('shoppinglist.txt', 'r') as fileobj:
# this method reads line by line:
lines = []
for line in fileobj:
lines.append(line.strip())
Podczas odczytywania plików należy pamiętać o znakach łamania linii właściwych dla systemu operacyjnego. Chociaż for line in fileobj
automatycznie usuwa je, zawsze można bezpiecznie wywołać strip()
na czytanych liniach, jak pokazano powyżej.
Otwarte pliki ( fileobj
w powyższych przykładach) zawsze wskazują na określoną lokalizację w pliku. Kiedy są otwierane po raz pierwszy, uchwyt pliku wskazuje na sam początek pliku, którym jest pozycja 0
. Uchwyt pliku może wyświetlać swoją bieżącą pozycję z tell
:
fileobj = open('shoppinglist.txt', 'r')
pos = fileobj.tell()
print('We are at %u.' % pos) # We are at 0.
Po odczytaniu całej zawartości pozycja modułu obsługi plików zostanie wskazana na końcu pliku:
content = fileobj.read()
end = fileobj.tell()
print('This file was %u characters long.' % end)
# This file was 22 characters long.
fileobj.close()
Pozycję obsługi plików można ustawić na dowolną potrzebną:
fileobj = open('shoppinglist.txt', 'r')
fileobj.seek(7)
pos = fileobj.tell()
print('We are at character #%u.' % pos)
Możesz także odczytać dowolną długość z zawartości pliku podczas danego połączenia. W tym celu przekaż argument dla read()
. Kiedy read()
jest wywoływany bez argumentu, będzie czytał do końca pliku. Jeśli podasz argument, odczytana zostanie ta liczba bajtów lub znaków, w zależności od trybu (odpowiednio rb
i 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()
Aby zademonstrować różnicę między znakami a bajtami:
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'>