Szukaj…


Korzystanie z input () i raw_input ()

Python 2.x 2.3

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.

Python 3.x 3.0

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

Python 3.x 3.0

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.
Python 2.x 2.3

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

Python 2.x 2.3

W Pythonie 2.x, aby kontynuować linię z print , zakończ instrukcję print przecinkiem. Automatycznie doda spację.

print "Hello,",
print "World!"
# Hello, World!
Python 3.x 3.0

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'>


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow