Ввод-вывод¶
Рано или поздно возникают ситуации, когда программа должна взаимодействовать с пользователем. Например, принять какие-нибудь данные от пользователя, а затем вывести результаты. Для этого применяются функции input() и print() соответственно.
Для вывода можно также использовать различные методы класса str (строка). К примеру, при помощи метода rjust можно получить строку, выравненную по правому краю к указанной ширине. См. help(str) для более подробного описания.
Ещё одним распространённым типом ввода/вывода является работа с файлами. Возможность создавать, читать и записывать в файлы является ключевой для многих программ, поэтому в настоящей главе и мы рассмотрим этот аспект.
Ввод от пользователя¶
Сохраните эту программу как user_input.py :
def reverse(text): return text[::-1] def is_palindrome(text): return text == reverse(text) something = input('Введите текст: ') if (is_palindrome(something)): print("Да, это палиндром") else: print("Нет, это не палиндром")
Вывод:
$ python3 user_input.py Введите текст: сэр Нет, это не палиндром $ python3 user_input.py Введите текст: мадам Да, это палиндром $ python3 user_input.py Введите текст: топот Да, это палиндром
Как это работает:
Мы применяем операцию вырезки для переворачивания текста. Мы уже видели, как создаются вырезки из последовательностей при помощи кода » seq[a:b] «, начиная с позиции a до позиции b . Но ведь мы также можем указать и третий аргумент, определяющий шаг, с которым производится вырезка. По умолчанию шаг равен 1 , поэтому и возвращается непрерывный фрагмент текста. Указание отрицательного шага, т.е. -1 приведёт к выводу текста в обратном порядке.
Функция input() принимает строку в качестве аргумента и показывает её пользователю. Затем она ждёт, чтобы пользователь набрал что-нибудь и нажал клавишу ввода. Как только пользователь это сделал, функция input() возвращает введённый пользователем текст.
Мы считываем этот текст и выстраиваем его в обратном порядке. Если перевёрнутый и исходный текст одинаковы, значит введённый текст является палиндромом.
Проверка, является ли текст палиндромом должна также игнорировать знаки пунктуации, пробелы и регистр букв. Например, «А роза упала на лапу Азора» также является палиндромом, но наша текущая программа так не считает. Попробуйте улучшить её так, чтобы она распознала этот палиндром.
Воспользуйтесь кортежем (список всех знаков пунктуации можно найти здесь, содержащим все запрещённые символы, и примените тест на принадлежность, чтобы обнаружить символы, подлежащие удалению, т. е. forbidden = (‘!’, ‘?’, ‘.’, . ).
Файлы¶
Открывать и использовать файлы для чтения или записи можно путём создания объекта класса file , а читать/записывать в файл — при помощи его методов read , readline или write соответственно. Возможность читать или записывать в файл зависит от режима, указанного при открытии файла. По окончании работы с файлом, нужно вызвать метод close 1 , чтобы указать Python, что файл больше не используется.
Пример: (сохраните как using_file.py )
poem = '''\ Программировать весело. Если работа скучна, Чтобы придать ей весёлый тон - используй Python! ''' f = open('poem.txt', 'w') # открываем для записи (writing) f.write(poem) # записываем текст в файл f.close() # закрываем файл f = open('poem.txt') # если не указан режим, по умолчанию подразумевается # режим чтения ('r'eading) while True: line = f.readline() if len(line) == 0: # Нулевая длина обозначает конец файла (EOF) break print(line, end='') f.close() # закрываем файл
Вывод:
$ python3 using_file.py Программировать весело. Если работа скучна, Чтобы придать ей весёлый тон - используй Python!
Как это работает:
Сперва мы открываем файл при помощи встроенной функции open с указанием имени файла и режима, в котором мы хотим его открыть. Режим может быть для чтения ( ‘r’ ), записи ( ‘w’ ) или добавления ( ‘a’ ) 2 . Можно также указать, в каком виде мы будем считывать, записывать или добавлять данные: в текстовом ( ‘t’ ) или бинарном ( ‘b’ ). На самом деле существует много других режимов, и help(open) даст вам их детальное описание. По умолчанию open() открывает файл как текст в режиме для чтения.
В нашем примере мы сначала открываем файл в режиме записи текста и используем метод write файлового объекта для записи в файл, после чего закрываем файл при помощи close .
Далее мы открываем тот же самый файл для чтения. В этом случае нет нужды указывать режим, так как режим «чтения текстового файла» применяется по умолчанию. Мы считываем файл построчно методом readline в цикле. Этот метод возвращает полную строку, включая символ перевода строки в конце. Когда же он возвращает пустую строку, это означает, что мы достигли конца файла, и мы прерываем цикл при помощи break .
По умолчанию функция print() выводит текст, автоматически добавляя символ перевода строки в конце. Мы подавляем этот символ, указывая end=» , поскольку строки, считанные из файла, и без того оканчиваются символом перевода строки. И, наконец, мы закрываем файл с помощью close .
Теперь проверяем содержимое файла poem.txt , чтобы убедиться, что программа действительно записала текст в него и считала из него.
Pickle¶
Python предоставляет стандартный модуль с именем pickle 3 , при помощи которого можно сохранять любой объект Python в файле, а затем извлекать его обратно. Это называется длительным хранением объекта.
Пример: (сохраните как pickling.py ):
import pickle # имя файла, в котором мы сохраним объект shoplistfile = 'shoplist.data' # список покупок shoplist = ['яблоки', 'манго', 'морковь'] # Запись в файл f = open(shoplistfile, 'wb') pickle.dump(shoplist, f) # помещаем объект в файл f.close() del shoplist # уничтожаем переменную shoplist # Считываем из хранилища f = open(shoplistfile, 'rb') storedlist = pickle.load(f) # загружаем объект из файла print(storedlist)
Вывод:
$ python3 pickling.py ['яблоки', 'манго', 'морковь']
Как это работает:
Чтобы сохранить объект в файле, нам нужно сперва открыть файл с помощью open в режиме бинарной записи ( ‘wb’ ), после чего вызвать функцию dump из модуля pickle . Этот процесс называется «консервацией» («pickling»).
После этого мы извлекаем объект при помощи функции load из модуля pickle , которая возвращает объект. Этот процесс называется «расконсервацией» («unpickling»).
Резюме¶
Мы обсудили разные типы ввода/вывода, а также работу с файлами и использование модуля pickle .
Далее мы познакомимся с концепцией исключений.
- close — англ. «закрывать» (прим.перев) ↩
- read, write и append соответственно (прим.перев.) ↩
- pickle — англ. «мариновать», «солить» (прим.перев.) ↩
Как вставить текст в поле ввода на сайте и нажать кнопку python
Есть один сайт, мне нужно с помощью Питона вставить в поле ввода на этом сайте ссылку и нажать на кнопку ввода этой ссылки. После должна открыться другая страница, где я должен получить другую ссылку и скопировать ее. Вроде как это можно через библиотеку Selenium, но не особо понял. Заранее спасибо за помощь!
Отслеживать
10.1k 5 5 золотых знаков 22 22 серебряных знака 67 67 бронзовых знаков
задан 4 июл 2021 в 13:53
Sherry Smith Sherry Smith
23 1 1 серебряный знак 6 6 бронзовых знаков
Кажется, можно попробовать github.com/pyppeteer/pyppeteer
4 июл 2021 в 14:08
вполне, понять бы еще этот порт) с помощью seleniuma может можно?
4 июл 2021 в 14:17
Простите, не имел с selenium дело, имел дело только с JS версией github.com/puppeteer/puppeteer
4 июл 2021 в 14:20
В документации к порту пишут, что документация к оригиналу может быть полезна. В оригинале есть файлы с примерами обычных операций. Может, у вас получится переделать, вот пример на JS с вводом и нажатием на кнопку: github.com/puppeteer/puppeteer/blob/main/examples/search.js
4 июл 2021 в 14:26
спасибо за помощь, попробую разобраться) но, конечно, хотелось бы с помощью селениума сделать, но если это поможет — почему нет)
4 июл 2021 в 15:13
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
pip install selenium
Для использования selenium потребуется драйвер браузера — https://selenium-python.readthedocs.io/installation.html#drivers (расположить в той же папке что и скрипт)
from selenium import webdriver from time import sleep # Открыть Chrome и перейти по указанному адресу: browser = webdriver.Chrome() browser.get('https://m.vk.com/') sleep(3) # для поиска элемента в примере используется XPath (F12 в браузере, поиск нужного элемента, ПКМ - Copy - XPath) # ввести в поле "Телефон и email" 123 eml = browser.find_element_by_xpath('//*[@id="mcont"]/div[1]/div[2]/div/div/form/dl[1]/dd/label/div/input').send_keys('123') sleep(2) # ввести в поле "Пароль" 456 phn = browser.find_element_by_xpath('//*[@id="mcont"]/div[1]/div[2]/div/div/form/dl[2]/dd/label/div/div[1]/input').send_keys('456') sleep(2) # нажать на кнопку "Войти" browser.find_element_by_xpath('//*[@id="mcont"]/div[1]/div[2]/div/div/form/div[1]/input').click()
sleep в примере указан для видимости действий.
Как ввести текст в python
Для вывода информации на консоль предназначена встроенная функция print() . При вызове этой функции ей в скобках передается выводимое значение:
print("Hello METANIT.COM")
Данный код выведет нам на консоль строку «Hello METANIT.COM».
Отличительной особенностью этой функции является то, что по умолчанию она выводит значение на отдельной строке. Например:
print("Hello World") print("Hello METANIT.COM") print("Hello Python")
Здесь три вызова функции print() выводят некоторое сообщение. Причем при выводе на консоль каждое сообщение будет размещаться на отдельной строке:
Hello World Hello METANIT.COM Hello Python
Такое поведение не всегда удобно. Например, мы хотим, чтобы все значения выводились на одной строке. Для этого нам надо настроить поведение функции с помощью параметра end . Этот параметр задает символы, которые добавляются в конце к выводимой строке и . При применении параметра end вызов функции print() выглядит следующим образом:
print(значение, end = конечные_символы)
По умолчанию end равен символу «\n» , который задает перевод на следующую строку. Собственно поэтому функция print по умолчанию выводит передаваемое ей значение на отдельной строке.
Теперь определим, чтобы функция не делала перевод на следующую строку, а выводила значение на той же строке:
print("Hello World", end=" ") print("Hello METANIT.COM", end=" ") print("Hello Python")
То есть теперь выводимые значения будут разделяться пробелом:
Hello World Hello METANIT.COM Hello Python
Причем это может быть не один символ, а набор символов:
print("Hello World", end=" and ") print("Hello METANIT.COM", end=" and ") print("Hello Python")
В данном случае выводимые сообщения будут отделяться символами » and » :
Hello World and Hello METANIT.COM and Hello Python
Консольный ввод
Наряду с выводом на консоль мы можем получать ввод пользователя с консоли, получать вводимые данные. Для этого в Python определена функция input() . В эту функцию передается приглашение к вводу. А результат ввода мы можем сохранить в переменную. Например, определим код для ввода пользователем имени:
name = input("Введите свое имя: ") print(f"Ваше имя: ")
В данном случае в функцию input() передается приглашение к вводу в виде строки «Введите свое имя: «. Результат функции — результат ввода пользователя передается в переменную name . Затем мы можем вывести значение этой переменной на консоль с помощью функции print() . Пример работы кода:
Введите свое имя: Eugene Ваше имя: Eugene
Еще пример с вводом нескольких значений:
name = input("Your name: ") age = input("Your age: ") print(f"Name: Age: ")
Пример работы программы:
Your name: Tom Your age: 37 Name: Tom Age: 37
Стоит учитывать, что все введенные значения рассматриваются как значения типа str , то есть строки. И даже если мы вводим число, как в втором случае в коде выше, то Python все равно будет рассматривать введенное значение как строку, а не как число.
Ввод и вывод данных
Черепашка может писать различные сообщения. Для этого существует команда write(). В скобках указываем сообщение, которое нам необходимо вывести. Не забываем его брать в кавычки или апострофы.
#Выведем сообщение Hello, world! turtle.write('Hello, world!')
У команды write() есть несколько необязательных параметров. Указывать их следует, если необходимо поменять внешний вид или параметры отображения текста. Один из таких параметров move, указывающий будет ли двигаться Черепашка по мере рисования надписи. По умолчанию он имеет значение False. Если его изменить на True, то после вывода Черепашка окажется в конце текста.
#Выведем сообщение Hello, world! turtle.write('Hello, world!', move = True)
Следующий параметр align – служит для выравнивания надписи относительно Черепашки. Может принимать значения right, center и left. По умолчанию равен значению right.
#Выведем сообщение Hello, world! по центру turtle.write('Hello, world!', align = 'center')
Чтобы изменить внешний вид надписи существует параметр font. Он принимает кортеж из трех значений: название шрифта, размер шрифта и тип начертания текста.
#Выведем сообщение шрифтом Arial размером 12 пунктов обычным начертанием turtle.write('Hello, world!', font = ('Arial', 12, 'normal'))
Так же в качестве начертания можно использовать: bold – полужирный, italic – курсив, или объединить их вместе. Тогда текст будет напечатан полужирным курсивом.
Для ввода текстовых данных существует команда textinput(). В качестве параметров указать два текстовых сообщения, первый для заголовка окна, второй для сообщения в диалоговом окне.
#Ввод текстового значения text = turtle.textinput('Заголовок окна', 'Текст в диалоговом окне')
После нажатия на кнопку OK в переменную text попадет текст диалоговом окне. Если будет нажата кнопка Cancel (Отмена), то будет передано значение None.
Для ввода числового значения существует команда numinput(). Помимо заголовка окна и текста сообщения, можно передать значение по умолчанию, которое будет отображаться в поле ввода, минимальное принимаемое значение и максимально возможное.
#Ввод числового значения didgit = turtle.numinput('Заголовок', 'Текст в окне', 100, minval = 10, maxval = 1000)

Если будет введено число меньше указанного минимального значения или больше указанного максимального, то будет выдано предупреждение и предложено повторить попытку. В случае, если будет нажата кнопка Cancel, то в переменную didgit будет передано значение None.
Важно, команды textinput() и numinput() поддерживаются только в 3.x версии Python, во 2.x версии их нет.
