Python Language
Основные входные и выходные данные
Поиск…
Использование input () и raw_input ()
raw_input
будет ждать ввода пользователем текста, а затем возвращает результат в виде строки.
foo = raw_input("Put a message here that asks the user for input")
В приведенном выше примере foo
сохранит все входящие данные, предоставленные пользователем.
input
будет ждать input
пользователем текста, а затем возвращает результат в виде строки.
foo = input("Put a message here that asks the user for input")
В приведенном выше примере foo
сохранит все входящие данные, предоставленные пользователем.
Использование функции печати
В Python 3 функция печати имеет форму функции:
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 изначально был напечатан оператор, как показано ниже.
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.
Примечание: использование from __future__ import print_function
в Python 2 позволит пользователям использовать функцию print()
же, как и код Python 3. Это доступно только в Python 2.6 и выше.
Функция для запроса пользователю номера
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)
И использовать его:
user_number = input_number("input a number: ", "that's not a number!")
Или, если вы не хотите «сообщение об ошибке»:
user_number = input_number("input a number: ")
Печать строки без новой строки в конце
В Python 2.x, чтобы продолжить строку с print
, завершите инструкцию print
запятой. Он автоматически добавит пробел.
print "Hello,",
print "World!"
# Hello, World!
В Python 3.x функция print
имеет необязательный end
параметр, который он печатает в конце данной строки. По умолчанию это символ новой строки, что эквивалентно этому:
print("Hello, ", end="\n")
print("World!")
# Hello,
# World!
Но вы могли бы передать другие строки
print("Hello, ", end="")
print("World!")
# Hello, World!
print("Hello, ", end="<br>")
print("World!")
# Hello, <br>World!
print("Hello, ", end="BREAK")
print("World!")
# Hello, BREAKWorld!
Если вы хотите получить больше контроля над выходом, вы можете использовать sys.stdout.write
:
import sys
sys.stdout.write("Hello, ")
sys.stdout.write("World!")
# Hello, World!
Читать с stdin
Программы Python могут считывать из unix-конвейеров . Вот простой пример, как читать из stdin
:
import sys
for line in sys.stdin:
print(line)
Имейте в sys.stdin
что sys.stdin
- это поток. Это означает, что for-loop прекратится только после завершения потока.
Теперь вы можете передать вывод другой программы в свою программу python следующим образом:
$ cat myfile | python myprogram.py
В этом примере cat myfile
может быть любой командой unix, которая выводит на stdout
.
В качестве альтернативы, использование модуля fileinput может оказаться полезным:
import fileinput
for line in fileinput.input():
process(line)
Вход из файла
Входные данные также можно считывать из файлов. Файлы могут быть открыты с помощью встроенной функции open
. Использование a with <command> as <name>
синтаксис with <command> as <name>
(называемый «Контекст-менеджер») делает использование open
и получение дескриптора для файла очень просто:
with open('somefile.txt', 'r') as fileobj:
# write code here using fileobj
Это гарантирует, что при выходе кода из блока файл автоматически закрывается.
Файлы можно открывать в разных режимах. В приведенном выше примере файл открывается как доступный только для чтения. Чтобы открыть существующий файл для чтения, используйте только r
. Если вы хотите прочитать этот файл в байтах, используйте rb
. Чтобы добавить данные в существующий файл, используйте a
. Используйте w
для создания файла или перезаписывания любых существующих файлов с тем же именем. Вы можете использовать r+
для открытия файла для чтения и записи. Первый аргумент open()
- имя файла, второй - режим. Если режим оставлен пустым, по умолчанию будет установлено значение 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']
Если размер файла крошечный, можно прочитать все содержимое файла в памяти. Если файл очень большой, часто лучше читать строки за строкой или кусками и обрабатывать ввод в том же цикле. Для этого:
with open('shoppinglist.txt', 'r') as fileobj:
# this method reads line by line:
lines = []
for line in fileobj:
lines.append(line.strip())
При чтении файлов имейте в виду персонажи разрыва строки операционной системы. Хотя for line in fileobj
автоматически удаляет их, всегда безопасно вызывать strip()
на прочитанных строках, как показано выше.
Открытые файлы ( fileobj
в приведенных выше примерах) всегда указывают на конкретное место в файле. Когда они сначала открываются, дескриптор файла указывает на самое начало файла, который является позицией 0
. Дескриптор файла может отображать его текущее положение с tell
:
fileobj = open('shoppinglist.txt', 'r')
pos = fileobj.tell()
print('We are at %u.' % pos) # We are at 0.
После прочтения всего содержимого позиция обработчика файла будет указана в конце файла:
content = fileobj.read()
end = fileobj.tell()
print('This file was %u characters long.' % end)
# This file was 22 characters long.
fileobj.close()
Позиция обработчика файла может быть настроена на все, что необходимо:
fileobj = open('shoppinglist.txt', 'r')
fileobj.seek(7)
pos = fileobj.tell()
print('We are at character #%u.' % pos)
Вы также можете читать любую длину из содержимого файла во время данного вызова. Для этого передайте аргумент для read()
. Когда read()
вызывается без аргумента, он будет считываться до конца файла. Если вы передадите аргумент, он будет читать это количество байтов или символов в зависимости от режима ( rb
и 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()
Чтобы продемонстрировать разницу между символами и байтами:
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'>