Функции input и print ввода/вывода
Содержание:
- Проверяет, что хотя бы один элемент в последовательности True.
- Задания для самоподготовки
- Known Issues
- Функции, которые когда-нибудь можно выучить
- Функция range()
- Цикл for и range()
- Сложные логические выражения
- Вот и всё об этом
- Sum of numbers and strings
- 5 функций для отладки
- А как сделать резервное копирование всех моих настроек?
- Зачем это нужно
- Вызов функции
- Python SciPy
- Практическая работа
- Примеры получения/ввода данных из консоли/клавиатуры.
- Почему Вам нужно обратиться именно к нам?
- Чтение, запись и обработка файлов в Python.
- Функция zip
- Практическая работа
Проверяет, что хотя бы один элемент в последовательности True.
Описание:
Функция возвращает , если какой-либо (любой) элемент в итерируемом объекте является истинным , в противном случае возвращает значение .
Если последовательность пуста, то функция возвращает .
Функция применяется для проверки истинности ЛЮБОГО из значений в итерируемом объекте и эквивалентна следующему коду:
def any(iterable): for element in iterable if element return True return False
Так же смотрите встроенную функцию .
В основном функция применяется в сочетании с оператором ветвления программы . Работу функции можно сравнить с оператором в Python, только работает с последовательностями:
>>> False or True or False # True >>> any() # True
Но между и в Python есть два основных различия:
- Синтаксис.
- Возвращаемое значение.
Функция всегда возвращает или .
>>> any() # True >>> any() # False
Оператор возвращает ПЕРВОЕ истинное значение, а если все значения , то ПОСЛЕДНЕЕ ложное значение.
>>> or 2 or 1 or or # 2 >>> or or '' # '' >>> bool( or 2 or 1 or or ) # True >>> bool( or or '') # False
Из всего сказанного можно сделать вывод, что для успешного использования функции необходимо в нее передавать последовательность, полученную в результате каких то вычислений/сравнений, элементы которого будут оцениваться как или . Это можно достичь применяя функцию или выражения-генераторы списков, используя в них встроенные функции языка, возвращающие значения, операции сравнения, оператор вхождения и оператор идентичности .
num = 1, 2.0, 3.1, 4, 5, 6, 7.9 # использование встроенных функций # на примере 'isdigit()' >>> str(x).isdigit() for x in num # # использование операции сравнения >>> x > 4 for x in num # # использование оператора вхождения `in` >>> '.' in str(x) for x in num # # использование оператора идентичности `in` >>> type(x) is int for x in num # # использование функции map() >>> list(map(lambda x x > 1, num)) False, True, True, True, True, True, True
Примеры проводимых проверок функцией .
Допустим у нас есть строка например с адресом и нам необходимо узнать, содержит ли адрес номер дома. Для этого разделим строку с адресом справа на лево методом по разделителю один раз.
>>> addr1 = '142100, г. Москва, ул. Свердлова, 15' >>> addr2 = '142100, г. Москва, ул. Свердлова' >>> any(map(str.isdigit, addr1.rsplit(' ',1))) # True >>> any(map(str.isdigit, addr2.rsplit(' ',1))) # False
Второй пример с числовой последовательностью. Необходимо узнать, есть ли в последовательности числа больше определенного значения.
>>> num1 = range(, 20, 2) >>> num2 = range(, 15, 2) >>> any() # True >>> any() # False
Так же можно проверять строку на наличие, каких то определенных символов.
Задания для самоподготовки
1. Поставить в
соответствие следующим английским символам русские буквы:
h – х, e – е, l – л, o – о, w – в, r – р, d – д
и преобразовать строку «hello world!» в русские символы.
2. Дан текст:
t = «»»Куда ты скачешь
гордый конь,
И
где опустишь ты копыта?
О
мощный властелин судьбы!
Не
так ли ты над самой бездной,
На высоте, уздой железной
Россию
поднял на дыбы?»»»
Необходимо
выделить каждое второе слово из этого стихотворения и представить результат в
виде упорядоченного списка. (Подумайте как реализовать алгоритм с наименьшими
затратами по памяти).
3. Реализовать
алгоритм для нахождения всех делителей натурального числа N. Число N вводится с
клавиатуры. Для начала можно реализовать простым перебором всех N возможных чисел
(делителей). Затем, подумайте, как можно оптимизировать по скорости этот
алгоритм.
Видео по теме
Python 3 #1: установка и запуск интерпретатора языка
Python 3 #2: переменные, оператор присваивания, типы данных
Python 3 #3: функции input и print ввода/вывода
Python 3 #4: арифметические операторы: сложение, вычитание, умножение, деление, степень
Python 3 #5: условный оператор if, составные условия с and, or, not
Python 3 #6: операторы циклов while и for, операторы break и continue
Python 3 #7: строки — сравнения, срезы строк, базовые функции str, len, ord, in
Python 3 #8: методы строк — upper, split, join, find, strip, isalpha, isdigit и другие
Python 3 #9: списки list и функции len, min, max, sum, sorted
Python 3 #10: списки — срезы и методы: append, insert, pop, sort, index, count, reverse, clear
Python 3 #11: списки — инструмент list comprehensions, сортировка методом выбора
Python 3 #12: словарь, методы словарей: len, clear, get, setdefault, pop
Python 3 #13: кортежи (tuple) и операции с ними: len, del, count, index
Python 3 #14: функции (def) — объявление и вызов
Python 3 #15: делаем «Сапер», проектирование программ «сверху-вниз»
Python 3 #16: рекурсивные и лямбда-функции, функции с произвольным числом аргументов
Python 3 #17: алгоритм Евклида, принцип тестирования программ
Python 3 #18: области видимости переменных — global, nonlocal
Python 3 #19: множества (set) и операции над ними: вычитание, пересечение, объединение, сравнение
Python 3 #20: итераторы, выражения-генераторы, функции-генераторы, оператор yield
Python 3 #21: функции map, filter, zip
Python 3 #22: сортировка sort() и sorted(), сортировка по ключам
Python 3 #23: обработка исключений: try, except, finally, else
Python 3 #24: файлы — чтение и запись: open, read, write, seek, readline, dump, load, pickle
Python 3 #25: форматирование строк: метод format и F-строки
Python 3 #26: создание и импорт модулей — import, from, as, dir, reload
Python 3 #27: пакеты (package) — создание, импорт, установка (менеджер pip)
Python 3 #28: декораторы функций и замыкания
Python 3 #29: установка и порядок работы в PyCharm
Python 3 #30: функция enumerate, примеры использования
Known Issues
Функции, которые когда-нибудь можно выучить
Следующие встроенные функции Python определённо не бесполезны, но они более специализированы.
Эти функции вам, возможно, будут нужны, но также есть шанс, что вы никогда не прибегнете к ним в своём коде.
- : возвращает итератор (список, набор и т. д.);
- : возвращает , если аргумент является вызываемым;
- and : вместо них рекомендуется использовать генератор-выражения;
- : округляет число;
- : эта функция выполняет деление без остатка () и операцию по модулю () одновременно;
- , и : служат для отображения чисел в виде строки в двоичной, восьмеричной или шестнадцатеричной форме;
- : возвращает абсолютное значение числа (аргумент может быть целым или числом с плавающей запятой, если аргумент является комплексным числом, его величина возвращается);
- ;
- .
Функция range()
Теперь пришло время познакомиться со встроенной в Python функцией range(). «Range» переводится как «диапазон». Она может принимать один, два или три аргумента. Их назначение такое же как у функции randrange() из модуля random. Если задан только один, то генерируются числа от 0 до указанного числа, не включая его. Если заданы два, то числа генерируются от первого до второго, не включая его. Если заданы три, то третье число – это шаг.
Однако, в отличие от randrange(), функция range() генерирует не одно случайное число в указанном диапазоне. Она вообще не генерирует случайные числа. Она генерирует последовательность чисел в указанном диапазоне. Так, range(5, 11) сгенерирует последовательность 5, 6, 7, 8, 9, 10. Однако это будет не структура данных типа «список». Функция range() производит объекты своего класса – диапазоны:
>>> a = range(-10, 10) >>> a range(-10, 10) >>> type(a) <class 'range'>
Несмотря на то, что мы не видим последовательности чисел, она есть, и мы можем обращаться к ее элементам:
>>> a -10 >>> a -5 >>> a 5 >>> a 9
Хотя изменять их нельзя, так как, в отличие от списков, объекты range() относятся к группе неизменяемых:
>>> a = 100 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'range' object does not support item assignment
Цикл for и range()
Итак, зачем нам понадобилась функций range() в теме про цикл for? Дело в том, что вместе они образуют неплохой тандем. For как цикл перебора элементов, в отличие от while, позволяет не следить за тем, достигнут ли конец структуры. Не надо вводить счетчик для этого, изменять его и проверять условие в заголовке. С другой стороны, range() дает последовательность целых чисел, которые можно использовать как индексы для элементов того же списка.
>>> range(len(spisok)) range(0, 4)
Здесь с помощью функции len() измеряется длина списка. В данном случае она равна четырем. После этого число 4 передается в функцию range(), и она генерирует последовательность чисел от 0 до 3 включительно. Это как раз индексы элементов нашего списка.
Теперь «соединим» for и range():
>>> for i in range(len(spisok)): ... spisok += 2 ... >>> spisok
В заголовке цикла for берутся элементы вовсе не списка, а объекта range. Список, элементы которого планируется перезаписывать, тут по-сути не фигурирует. Если заранее знать длину списка, то заголовок может выглядеть так: . То, как используется i в теле цикла, вопрос второй. Примечание. Вместо идентификатора может быть любой другой.
Сложные логические выражения
Логические выражения типа являются простыми, так как в них выполняется только одна логическая операция. Однако, на практике нередко возникает необходимость в более сложных выражениях. Может понадобиться получить ответа «Да» или «Нет» в зависимости от результата выполнения двух простых выражений. Например, «на улице идет снег или дождь», «переменная news больше 12 и меньше 20».
В таких случаях используются специальные операторы, объединяющие два и более простых логических выражения. Широко используются два оператора – так называемые логические И (and) и ИЛИ (or).
Чтобы получить True при использовании оператора and, необходимо, чтобы результаты обоих простых выражений, которые связывает данный оператор, были истинными. Если хотя бы в одном случае результатом будет False, то и все сложное выражение будет ложным.
Чтобы получить True при использовании оператора or, необходимо, чтобы результат хотя бы одного простого выражения, входящего в состав сложного, был истинным. В случае оператора or сложное выражение становится ложным лишь тогда, когда ложны оба составляющие его простые выражения.
Допустим, переменной было присвоено значение 8 (), переменной присвоили 13 (). Логическое выражение будет выполняться следующим образом. Сначала выполнится выражение . Его результатом будет True. Затем выполнится выражение . Его результатом будет False. Далее выражение сведется к , что вернет False.
>>> x = 8 >>> y = 13 >>> y < 15 and x > 8 False
Если бы мы записали выражение так: , то оно также вернуло бы False. Однако сравнение не выполнялось бы интерпретатором, так как его незачем выполнять. Ведь первое простое логическое выражение () уже вернуло ложь, которая, в случае оператора and, превращает все выражение в ложь.
В случае с оператором or второе простое выражение проверяется, если первое вернуло ложь, и не проверяется, если уже первое вернуло истину
Так как для истинности всего выражения достаточно единственного True, неважно по какую сторону от or оно стоит
>>> y < 15 or x > 8 True
В языке Python есть еще унарный логический оператор not, т. е. отрицание. Он превращает правду в ложь, а ложь в правду. Унарный он потому, что применяется к одному выражению, стоящему после него, а не справа и слева от него как в случае бинарных and и or.
>>> not y < 15 False
Здесь возвращает True. Отрицая это, мы получаем False.
>>> a = 5 >>> b = 0 >>> not a False >>> not b True
Число 5 трактуется как истина, отрицание истины дает ложь. Ноль приравнивается к False. Отрицание False дает True.
Вот и всё об этом
Sum of numbers and strings
Let’s try to write a program that inputs two numbers and prints their sum. We read the two numbers
and store them in the variables and using the assignment operator .
On the left side of an assignment operator we put the name of the variable. The name could be a string of latin characters (, , , )
but must start with a letter in the range or .
On the right side of an assignment operator we put any expression that Python can evaluate.
The name starts pointing to the result of the evaluation.
Read this example, run it and look at the output:
5 7
a = input() b = input() s = a + b print(s)
After running the example we can see that it prints . As we were taught in school,
gives . So, the program is wrong, and it’s important to understand why.
The thing is, in the third line Python has «summed» two strings, rather than two numbers.
The sum of two strings in Python works as follows: they are just glued one after another. It’s also sometimes
called «string concatenation».
Do you see in the variable inspector, on the right hand side, that the values bound to variables and
are wrapped in quotes? That means that the values there are string, not numbers. Strings and numbers
are represented in Python differently.
All the values in Python are called «objects». Every object has a certain type. The number 2 corresponds to an object «number 2» of type «int»
(i.e., an integer number). The string corresponds to an object «string ‘hello'» of type «str».
Every floating-point number is represented as an object of type «float». The type
of an object specifies what kind of operations may be applied to it.
For instance, if the two variables and are pointing to the objects of type , Python can multiply them. However, if they are pointing to the objects of type , Python can’t do that:
None
first = 5 second = 7 print(first * second) # you can use single or double quotes to define a string first = '5' second = "7" print(first * second)
To cast (convert) the string of digits into an integer number, we can use the function . For example, gives an int object with value .
Given the information above, we can now fix the incorrect output and output the sum of the two numbers correctly:
5 7
a = int(input()) b = int(input()) s = a + b print(s)
5 функций для отладки
Эти функции часто игнорируются, но будут полезны для отладки и устранения неисправностей кода.
breakpoint
Если нужно приостановить выполнение кода и перейти в командную строку Python, эта функция вам пригодится. Вызов перебросит вас в отладчик Python.
Эта встроенная функция была добавлена в Python 3.7, но если вы работаете в более старых версиях, можете получить тот же результат с помощью .
dir
Эта функция может использоваться в двух случаях:
- просмотр списка всех локальных переменных;
- просмотр списка всех атрибутов конкретного объекта.
Из примера можно увидеть локальные переменные сразу после запуска и после создания новой переменной .
Если в передать созданный список , на выходе можно увидеть все его атрибуты.
В выведенном списке атрибутов можно увидеть его типичные методы (, , и т. д.) , а также множество более сложных методов для перегрузки операторов.
vars
Эта функция является своего рода смесью двух похожих инструментов: и .
Когда вызывается без аргументов, это эквивалентно вызову , которая показывает словарь всех локальных переменных и их значений.
Когда вызов происходит с аргументом, получает доступ к атрибуту , который представляет собой словарь всех атрибутов экземпляра.
Перед использованием было бы неплохо сначала обратиться к .
type
Эта функция возвращает тип объекта, который вы ей передаете.
Тип экземпляра класса есть сам класс.
Тип класса — это его метакласс, обычно это .
Атрибут даёт тот же результат, что и функция , но рекомендуется использовать второй вариант.
Функция , кроме отладки, иногда полезна и в реальном коде (особенно в объектно-ориентированном программировании с наследованием и пользовательскими строковыми представлениями).
Обратите внимание, что при проверке типов обычно вместо используется функция. Также стоит понимать, что в Python обычно не принято проверять типы объектов (вместо этого практикуется утиная типизация)
help
Если вы находитесь в Python Shell или делаете отладку кода с использованием , и хотите знать, как работает определённый объект, метод или атрибут, функция поможет вам.
В действительности вы, скорее всего, будете обращаться за помощью к поисковой системе. Но если вы уже находитесь в Python Shell, вызов будет быстрее, чем поиск документации в Google.
А как сделать резервное копирование всех моих настроек?
Зачем это нужно
Цель — указать разработчику на ожидаемый тип данных при получении или возврате данных из функции или метода. В свою очередь, это позволяет сократить количество багов, ускорить написание кода и улучшить его качество.
Допустим, у вас есть класс юзера и функция, которая преобразует json в .
Конечно, можно написать и проще:
Однако, в обоих случаях может возникнуть ошибка, если ключ будет присутствовать и при этом иметь строковый тип. Валидация типов добавляет не очень много строк кода, но при большом количестве моделей может занимать немало места в проекте.
Использование Pydantic помогает корректно валидировать данные, при этом тип автоматически поменяется на требуемый.
Как можно заметить, более строгая типизация кода помогает сделать его проще и безопаснее. Однако, использование некоторых возможностей Pydantic может нежелательно повлиять на код. Так, мутация данных при валидации способна привести к тому, что тип значения модели будет непонятен. Например:
В данном примере созданный User после валидации будет иметь отличный от того, который был указан в модели. Это ведет к возможным крупным багам, которые лучше всегда избегать.
Также сейчас набирает большую популярность фреймворк FastAPI, который, благодаря Pydantic, позволяет быстро писать веб-приложения с автоматической валидацией данных.
В данном примере эндпоинт /item автоматически валидирует входящий json и передает его в функцию как требуемую модель.
Также для уменьшения количества багов используют mypy, который позволяет проводить статический анализ кода на соответствие типов. За счет этого зачастую можно избежать очевидных багов или несоответствий типов в функциях.
И как бонус для тех, кто ленится вручную поддерживать типизацию. дает возможность автоматически проставить типы во всех функциях, хотя после запуска этой программы обычно требуется пройтись по коду и поправить некоторые значения, которые оказались распознаны не так, как предполагалось.
Вызов функции
Рассмотрим полную версию программы с функцией:
def countFood(): a = int(input()) b = int(input()) print("Всего", a+b, "шт.") print("Сколько бананов и ананасов для обезьян?") countFood() print("Сколько жуков и червей для ежей?") countFood() print("Сколько рыб и моллюсков для выдр?") countFood()
После вывода на экран каждого информационного сообщения осуществляется вызов функции, который выглядит просто как упоминание ее имени со скобками. Поскольку в функцию мы ничего не передаем скобки опять же пустые. В приведенном коде функция вызывается три раза.
Когда функция вызывается, поток выполнения программы переходит к ее определению и начинает исполнять ее тело. После того, как тело функции исполнено, поток выполнения возвращается в основной код в то место, где функция вызывалась. Далее исполняется следующее за вызовом выражение.
В языке Python определение функции должно предшествовать ее вызовам. Это связано с тем, что интерпретатор читает код строка за строкой и о том, что находится ниже по течению, ему еще неизвестно. Поэтому если вызов функции предшествует ее определению, то возникает ошибка (выбрасывается исключение NameError):
print("Сколько бананов и ананасов для обезьян?") countFood() print("Сколько жуков и червей для ежей?") countFood() print("Сколько рыб и моллюсков для выдр?") countFood() def countFood(): a = int(input()) b = int(input()) print("Всего", a+b, "шт.")
Результат:
Сколько бананов и ананасов для обезьян? Traceback (most recent call last): File "test.py", line 2, in <module> countFood() NameError: name 'countFood' is not defined
Для многих компилируемых языков это не обязательное условие. Там можно определять и вызывать функцию в произвольных местах программы. Однако для удобочитаемости кода программисты даже в этом случае предпочитают соблюдать определенные правила.
Python SciPy
Практическая работа
-
Вводится строка, включающая строчные и прописные буквы. Требуется вывести ту же строку в одном регистре, который зависит от того, каких букв больше. При равном количестве преобразовать в нижний регистр. Например, вводится строка «HeLLo World», она должна быть преобразована в «hello world», потому что в исходной строке малых букв больше. В коде используйте цикл for, строковые методы upper() (преобразование к верхнему регистру) и lower() (преобразование к нижнему регистру), а также методы isupper() и islower(), проверяющие регистр строки или символа.
-
Строковый метод isdigit() проверяет, состоит ли строка только из цифр. Напишите программу, которая запрашивает с ввода два целых числа и выводит их сумму. В случае некорректного ввода программа не должна завершаться с ошибкой, а должна продолжать запрашивать числа. Обработчик исключений try-except использовать нельзя.
Примеры получения/ввода данных из консоли/клавиатуры.
- ;
- ;
- .
Общие примеры использования функции .
>>> x = input('Enter your name:') # Enter your name:Anton >>> print('Hello, ', x) # Hello, Anton # Можно и без строки подсказки >>> print('Введите число:') # Введите число: >>> x = input() # 10 # Не забываем что функция # возвращает строку >>> x # '10'
Проверка и преобразование типов при вводе данных с клавиатура.
Пример представляет собой программу подсчета суммы или произведения введенных в консоль чисел. В примере будем распознавать числовые типы на примере типов и , читаемые функцией из консоли интерпретатора Python.
# test.py def str_to_num(line): """функция конвертирует строку в число""" line = line.strip() # если в строке только цифры if line.isdigit(): return int(line) # если строка содержит точку или запятую elif '.' in line or ',' in line # если из строки убрать точку или запятую # и при этом в строке останутся только цифры if any(line.replace(x, '').isdigit() for x in '.', ',']): return float(line.replace(',', '.')) else # ошибка print('Это не число!\n') return None print('\nДля выхода из программы введите Ctrl+C') print('Для окончания ввода цифр нажмите Enter\n') nums = [] while True inpt = input('Ожидается ввод числа или Enter:') if inpt == '' # Закончить ввод чисел break n = str_to_num(inpt) if n is not None nums.append(n) if nums if len(nums) == 1 print('Вы ввели одну цифру: ', nums]) else print('\nВыберите действие:') print(' сложить цифры введите 1;') print(' умножить цифры введите 2.\n') rez = None while True inpt = input('Введите 1 или 2:') inpt = inpt.strip() if inpt == '1' rez = sum(nums) print('Сумма введенных чисел:', rez) elif inpt == '2' rez = 1 for i in nums rez *= i print('Произведение введенных чисел:', rez) else print('Неправильное действие.\n') if rez is not None break else print('Вы ничего не ввели.')
Вывод программы:
$ python3 test.py Для выхода из программы введите Ctrl+C Для окончания ввода цифр нажмите Enter Ожидается ввод числа или Enter:10 Ожидается ввод числа или Enter:13.9 Ожидается ввод числа или Enter:9,9 Ожидается ввод числа или Enter: Выберите действие: сложить цифры введите 1; умножить цифры введите 2. Введите 1 или 2:2 Произведение введенных чисел: 1376.1000000000001
Эмуляция терминала с использованием функцией .
Для воспроизведения вывода ошибок при выполнении команд в воображаемой «консоли» воспользуемся модулем . Выполнять введенный код будем при помощи встроенной функции .
# test.py import sys, traceback def run_user_code(envdir): source = input(">>> ") try # Выполнение введенного кода с клавиатуры exec(source, envdir) except Exception print("Exception in user code:") print("-"*60) traceback.print_exc(file=sys.stdout) print("-"*60) # словарь для хранения введенных переменных envdir = {} while True run_user_code(envdir)
Запускаем эмуляцию интерпретатора Python.
Почему Вам нужно обратиться именно к нам?
Чтение, запись и обработка файлов в Python.
При доступе к файлу в операционной системе требуется правильно указать путь к файлу. Путь к файлу — это строка, которая представляет местоположение файла.
# Unix /path/to/file/text.txt # Windows c:\path\to\file\text.txt
Он разбит на три основные части:
- Путь к файлу : расположение директории в файловой системе, где папки разделены прямой косой чертой в Unix подобных системах или обратной косой чертой в Windows.
- Имя файла : фактическое имя файла.
- Расширение : используется для указания типа файла.
Для чтения или записи в файл нам необходимо его открыть, а для этого нужно передать путь к нужному файлу в качестве строки функции . Для Unix подобных систем это делается просто:
>>> full_path = '/path/to/file/text.txt' >>> print(full_path) # /path/to/file/text.txt
В системе Windows путь включает в себя обратную косую черту . Этот символ в строках на Python используется для экранирования escape-последовательностей, таких как новая строка .
>>> full_path = 'c:\path\to\file\text.txt' >>> print(full_path) # c:\path o # ile ext.txt
Что бы избежать Windows системах такого безобразия, нам нужно вручную экранировать обратную косую черту или передавать в функции сырую (необработанную) строку, указав перед первой кавычкой строковой литерал :
# экранируем обратную косую черту >>> full_path = 'c:\\path\\to\\file\\text.txt' >>> print(full_path) # c:\path\to\file\text.txt # строковой литерал raw строки >>> full_path = r'c:\path\to\file\text.txt' >>> print(full_path) # c:\path\to\file\text.txt
Открытие/закрытие файла для чтения/записи в Python.
Прежде чем начать работать с файлом, первое, что нужно сделать, это открыть его. Это делается путем вызова встроенной функции open(). Она имеет единственный обязательный аргумент, который представляет путь к файлу filename
Типы обрабатываемых данных и файлов в Python.
Существуют три типа файлов которые чаще всего обрабатываются на практике. Текстовые файлы. Буферизованные двоичные типы файлов. Необработанный тип файлов Raw.
Способы чтения открытого файла в Python.
Существует несколько методов, которые могут быть вызваны для чтения открытого файла. read(size=-1), readline(size=-1), readlines()
Способы записи в открытый файл в Python.
Как и при чтении файлов, файловые объекты имеют несколько методов, которые полезны для записи в файл. fp.write(string), fp.writelines(sequence)
Одновременное чтение и запись в разные файлы в Python.
Есть моменты, когда вы можете захотеть прочитать файл и записать в другой файл одновременно.
Добавление данных в открытый файл в Python..
Иногда может понадобиться добавить данные в файл или начать запись в конце уже заполненного файла. Это легко сделать, используя символ ‘a’ для аргумента mode функции open():
Управление указателем чтения/записи в файле в Python.
Краткий обзор методов управления указателем чтения/записи в файле.
Создание менеджера для обработки файла в Python.
У менеджера контекста есть два «магических метода». __enter__() — вызывается при вызове оператора with. __exit__() вызывается при выходе из блока оператора with.
Сохранение словарей в формат JSON в Python.
Для сохранения сложных типов данных в файлы, Python позволяет использовать популярный формат обмена данными, называемый JSON. pickle — это протокол, который позволяет сериализовать произвольно сложные объекты Python.
Встроенные модули для работы с разными форматами в Python.
Есть общие ситуации, с которыми вы можете столкнуться при работе с файлами. Большинство из этих случаев могут быть обработаны с помощью других модулей и библиотек.
Функция zip
Следующая весьма
полезная функция позволяет объединять между собой соответствующие элементы
упорядоченных коллекций. Например, у нас имеется два списка:
a = 1,2,3,4 b = 5,6,7,8
И вызывая для
них функцию zip:
it = zip(a, b) print(it)
Получим
итератор, который возвращает следующую коллекцию:
print( list(it ) )
и мы увидим:
То есть, у нас
были объединены в кортеж соответствующие элементы этих двух списков.
Давайте теперь
добавим еще один итерируемый объект – строку:
c = "abracadabra"
И вызовем
функцию zip для всех этих
трех объектов:
it = zip(a, b, c) print( list(it ) )
В результате
получим коллекцию:
Смотрите, мы
здесь имеем всего четыре кортежа, в каждом из которых по три элемента. То есть,
все оставшиеся символы строки «abracadabra» были
просто отброшены. Получается, что функция zip формирует
выходной список, длина которого равна длине наименьшей из указанных коллекций.
Если, например, мы уменьшим коллекцию a до двух
элементов:
a = 1,2
то на выходе также
получим список из двух элементов:
Вот в этом и
заключается удобство этой функции: она позволяет автоматически объединить
несколько списков в наборы кортежей из соответствующих значений.
Следующие
задания для самостоятельного решения не связаны с материалом этого урока, а
охватывают все предыдущие занятия. Попробуйте реализовать их на Python и проверить
свои знания.
Практическая работа
-
Переменной var_int присвойте значение 10, var_float — значение 8.4, var_str — «No».
-
Значение, хранимое в переменной var_int, увеличьте в 3.5 раза. Полученный результат свяжите с переменной var_big.
-
Измените значение, хранимое в переменной var_float, уменьшив его на единицу, результат свяжите с той же переменной.
-
Разделите var_int на var_float, а затем var_big на var_float. Результат данных выражений не привязывайте ни к каким переменным.
-
Измените значение переменной var_str на «NoNoYesYesYes». При формировании нового значения используйте операции конкатенации (+) и повторения строки (*).
-
Выведите значения всех переменных.