Введение
IO является вводом и выводом.Если какая-либо программа хочет взаимодействовать с внешним миром, она должна использовать IO. По сравнению с java, ввод-вывод в Python проще и удобнее в использовании.
В этой статье подробно описаны операции ввода-вывода в Python.
вход и выход линукс
В Linux есть три стандартных ввода и вывода, а именно STDIN, STDOUT, STDERR, соответствующие числа 0, 1, 2.
STDIN — это стандартный ввод, который по умолчанию считывает информацию с клавиатуры;
STDOUT — это стандартный вывод, а результаты вывода по умолчанию выводятся на терминал;
STDERR является стандартной ошибкой, и вывод по умолчанию выводится на терминал.
Обычно используемый 2>&1 относится к указанию стандартного вывода и стандартной ошибки как одного и того же пути вывода.
форматированный вывод
В Python мы можем использовать метод печати для вывода информации.
Давайте посмотрим на определение функции печати:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
Функция печати будетobjectsпечатать вfileуказанный текстовый поток вsepотделяется и добавляется в концеend.sep, end, fileиflushЕсли он присутствует, он должен быть указан в качестве аргумента ключевого слова.
Все аргументы, не являющиеся ключевыми словами, преобразуются в строки и записываются в поток сsepразделить и добавить в концеend.sepиendдолжны быть строками; они также могут бытьNone
, что означает использование значения по умолчанию. если не даноobjects,ноprint()
будет только писатьend.
fileпараметр должен бытьwrite(string)
объект метода; если параметр не существует илиNone
, буду использоватьsys.stdout
. Поскольку аргументы для печати преобразуются в текстовые строки, поэтомуprint()
Не может использоваться для файловых объектов в двоичном режиме. Для этих объектов вы можете использоватьfile.write(...)
.
Кэшируется ли вывод обычно определяетсяfile,но еслиflushЕсли аргумент ключевого слова истинен, выходной поток будет принудительно очищен.
Вы можете видеть, что выходной формат печати относительно прост. Давайте посмотрим, как обогатить выходной формат.
формат
Если вы хотите отформатировать строку, вы можете добавить ее перед открывающей кавычкой строки.f
илиF
.
В этом случае мы можем напрямую ввести значение переменной в строку, просто поместив переменную в{
и}
в центре.
>>> year = 2016
>>> event = 'Referendum'
>>> f'Results of the {year} {event}'
'Results of the 2016 Referendum'
Помимо помещения переменных Python в { }, вы также можете поместить в него функции:
>>> import math
>>> print(f'The value of pi is approximately {math.pi:.3f}.')
The value of pi is approximately 3.142.
существует':'
Передача целого числа после может сделать поле минимальной шириной символа. Удобное выравнивание столбцов:
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
>>> for name, phone in table.items():
... print(f'{name:10} ==> {phone:10d}')
...
Sjoerd ==> 4127
Jack ==> 4098
Dcab ==> 7678
За переменными в {} также может следовать символ преобразования:'!a'
Указывает приложениеascii()
,'!s'
Указывает приложениеstr()
,и'!r'
Указывает приложениеrepr()
:
>>> animals = 'eels'
>>> print(f'My hovercraft is full of {animals}.')
My hovercraft is full of eels.
>>> print(f'My hovercraft is full of {animals!r}.')
My hovercraft is full of 'eels'.
формат формат
Кроме того, сама str поставляется с мощнымformatфункция:
str.format(*args, **kwargs)
Строка, для которой вызывается этот метод, может содержать строковые литералы или быть заключена в фигурные скобки.{}
Поля замены в квадратных скобках, каждое из которых может содержать числовой индекс позиционного параметра или имя ключевого параметра. Каждое поле замены в возвращаемой копии строки заменяется строковым значением соответствующего параметра.
>>> "The sum of 1 + 2 is {0}".format(1+2)
'The sum of 1 + 2 is 3'
Вот еще один пример использования индексов:
>>> print('{0} and {1}'.format('spam', 'eggs'))
spam and eggs
>>> print('{1} and {0}'.format('spam', 'eggs'))
eggs and spam
См. пример ключевого слова:
>>> print('This {food} is {adjective}.'.format(
... food='spam', adjective='absolutely horrible'))
This spam is absolutely horrible.
Давайте посмотрим на другой пример композиции:
>>> print('The story of {0}, {1}, and {other}.'.format('Bill', 'Manfred',
other='Georg'))
The story of Bill, Manfred, and Georg.
Есть и примеры очень сложных комбинаций:
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
>>> print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; '
... 'Dcab: {0[Dcab]:d}'.format(table))
Jack: 4098; Sjoerd: 4127; Dcab: 8637678
Или используйте нотацию '**' для передачи таблицы в качестве аргумента ключевого слова:
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
>>> print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table))
Jack: 4098; Sjoerd: 4127; Dcab: 8637678
Вы также можете использовать n типов'{:n}'
для форматирования чисел:
>>> yes_votes = 42_572_654
>>> no_votes = 43_132_495
>>> percentage = yes_votes / (yes_votes + no_votes)
>>> '{:-9} YES votes {:2.2%}'.format(yes_votes, percentage)
' 42572654 YES votes 49.67%'
репр и стр
Если мы просто хотим преобразовать объект Python в строку, мы можем использоватьrepr()
илиstr()
, str()
Функция — это представление, используемое для возврата удобочитаемого значения, в то время какrepr()
используется для создания представления, читаемого интерпретатором.
Например:
>>> s = 'Hello, world.'
>>> str(s)
'Hello, world.'
>>> repr(s)
"'Hello, world.'"
>>> str(1/7)
'0.14285714285714285'
>>> x = 10 * 3.25
>>> y = 200 * 200
>>> s = 'The value of x is ' + repr(x) + ', and y is ' + repr(y) + '...'
>>> print(s)
The value of x is 32.5, and y is 40000...
>>> # The repr() of a string adds string quotes and backslashes:
... hello = 'hello, world\n'
>>> hellos = repr(hello)
>>> print(hellos)
'hello, world\n'
>>> # The argument to repr() may be any Python object:
... repr((x, y, ('spam', 'eggs')))
"(32.5, 40000, ('spam', 'eggs'))"
Объект str также предоставляет несколько методов для ручного форматирования строк:
>>> for x in range(1, 11):
... print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
... # Note use of 'end' on previous line
... print(repr(x*x*x).rjust(4))
...
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
строковый объектstr.rjust()
Метод выравнивает строку по правому краю в поле заданной ширины, заполняя пробелами слева. Аналогичные методы такжеstr.ljust()
иstr.center()
.
Если входная строка слишком длинная, они не усекают строку, а возвращают ее как есть.
Если вы хотите гарантировать длину строки, вы можете использовать нарезку:x.ljust(n)[:n]
.
Вы также можете использовать str.zfill() для заполнения строки нулями:
>>> '12'.zfill(5)
'00012'
>>> '-3.14'.zfill(7)
'-003.14'
>>> '3.14159265359'.zfill(5)
'3.14159265359'
Метод %Формат
% также может использоваться для форматирования строк, учитывая'string' % values
,ноstring
середина%
Экземпляры будут начинаться с нуля или болееvalues
замена элемента. Эту операцию часто называют интерполяцией строк.
>>> import math
>>> print('The value of pi is approximately %5.3f.' % math.pi)
The value of pi is approximately 3.142.
читать и писать файлы
Чтение файлов в python очень просто, используяopen()
метод.
open()
вернет файловый объект. Давайте посмотрим на его определение:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Первый параметр — это имя файла.
Второй параметр — это режим, в котором открывается файл.Доступные режимы:
персонаж | значение |
---|---|
'r' |
читать (по умолчанию) |
'w' |
сначала напишите и обрежьте файл |
'x' |
Эксклюзивное создание, ошибка, если файл уже существует |
'a' |
написать, добавить в конце, если файл существует |
'b' |
двоичный режим |
't' |
текстовый режим (по умолчанию) |
'+' |
Открыт для обновлений (чтение и запись) |
Режим по умолчанию'r'
.
См. пример открытого файла:
>>> f = open('workfile', 'w')
Файл открыт и его естественно нужно закрыть, поэтому нам нужно отобразить вызовf.close()
метод:
>>> f.close()
Есть ли функция автоматического закрытия файлов, аналогичная попытке с ресурсом в java?
Мы можем использовать with, чтобы файл автоматически закрывался после использования, что очень просто в использовании.
>>> with open('workfile') as f:
... read_data = f.read()
>>> # We can check that the file has been automatically closed.
>>> f.closed
True
После закрытия файла, если вы попытаетесь прочитать его снова, вы получите ошибку:
>>> f.close()
>>> f.read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file.
методы файлового объекта
После получения файлового объекта мы можем вызывать методы в файле.
f.read(size)
Некоторые данные считываются и возвращаются в виде строки (в текстовом режиме) или байтового объекта (в двоичном режиме).
sizeнеобязательный числовой параметр. когдаsizeПри опущении или отрицательном значении будет прочитано и возвращено содержимое всего файла, при других значениях не болееsizeсимволов (в текстовом режиме) илиsizeбайт (в двоичном режиме). Если достигнут конец файла,f.read()
вернет пустую строку (''
).
>>> f.read()
'This is the entire file.\n'
>>> f.read()
''
f.readline()
Прочитать строку из файла; новая строка (\n
) оставлен в конце строки или опущен в последней строке файла, если файл не заканчивается новой строкой. еслиf.readline()
Возвращает пустую строку, указывающую, что достигнут конец файла, и используется пустая строка'\n'
Указывает, что строка содержит только символ новой строки.
>>> f.readline()
'This is the first line of the file.\n'
>>> f.readline()
'Second line of the file\n'
>>> f.readline()
''
Существует также более простой способ чтения, который заключается в повторении из файла:
>>> for line in f:
... print(line, end='')
...
This is the first line of the file.
Second line of the file
Если вы хотите прочитать все строки в файле в виде списка, вы также можете использоватьlist(f)
илиf.readlines()
.
f.write(string)
положитstringЗаписывает содержимое файла в файл и возвращает количество записанных символов.
>>> f.write('This is a test\n')
15
Если он в текстовом режиме, то перед записью в файл объект нужно преобразовать в текстовый вид, мы можем использоватьstr()
для преобразования.
>>> value = ('the answer', 42)
>>> s = str(value) # convert the tuple to string
>>> f.write(s)
18
использоватьf.seek(offset, whence)
Положение указателя файла можно найти, и последующие чтения будут начинаться с этой позиции.
whenceЗначение 0 означает отсчет с начала файла, 1 означает использование текущей позиции в файле, а 2 означает использование конца файла в качестве точки отсчета.whenceЕсли этот параметр опущен, по умолчанию используется значение 0, при котором в качестве точки отсчета используется начало файла.
>>> f = open('workfile', 'rb+')
>>> f.write(b'0123456789abcdef')
16
>>> f.seek(5) # Go to the 6th byte in the file
5
>>> f.read(1)
b'5'
>>> f.seek(-3, 2) # Go to the 3rd byte before the end
13
>>> f.read(1)
b'd'
использовать json
JSON — это формат файла, который очень удобен для обмена информацией. Давайте посмотрим, как использовать JSON для преобразования объекта в строку:
>>> import json
>>> json.dumps([1, 'simple', 'list'])
'[1, "simple", "list"]'
dumps — преобразовать объект в json str. JSON также имеет метод дампа, который может напрямую сохранять объекты в файле.
json.dump(x, f)
Чтобы разобрать строку json из файла, вы можете использовать load:
x = json.load(f)
Ключ в паре ключ-значение в JSON всегда
str
Тип. Когда объект преобразуется в JSON, все ключи в словаре преобразуются в строки. Следствием этого является то, что словарь, преобразованный в JSON, а затем обратно в словарь, может не совпадать с оригиналом. Другими словами, если x имеет ключи, не являющиеся строками, то существуютloads(dumps(x)) != x
.
Эта статья была включена вWoohoo. Floyd Press.com/08-Python-i…
Самая популярная интерпретация, самая глубокая галантерея, самые краткие уроки и множество трюков, о которых вы не знаете, ждут вас!
Добро пожаловать, чтобы обратить внимание на мой официальный аккаунт: «Программируйте эти вещи», разбирайтесь в технологиях, лучше поймите себя!