Язык Python в медицинских системах искусственного интеллекта. Ч.1. Введение в программирование на языке Python. Учебное пособие
.pdfполучать идентификатор текущего процесса, управлять дочерними процессами и обрабатывать сигналы системы. Такие функции делают os незаменимыминструментомдляразработкиприложений,тесносвязанных с операционной системой, например, в области системного администрирования или разработки серверных утилит.
Важной особенностью библиотеки является поддержка различных стандартов и форматов путей, что особенно полезно для работы с файлами и папками в операционных системах Windows, macOS и Linux. Например, функции для нормализации и соединения путей, предоставляемые модулем os.path, позволяют избежать ошибок при обработке файлов, связанных с различными соглашениями об оформлении путей. Например, чтобы узнать адрес текущей директории, достаточно написать
os.getcwd()
Для создания директории можно использовать функцию “make directory” – mkdir():
os.mkdir("new_directory")
Но более грамотно будет писать os.makedirs("new_directory", exist_ok=True)
Здесь параметр exist_ok=True говорит программе, что если такая директория уже существует, то “пропускаем” команду и идём дальше, иначе в такой ситуации команда выбрасывает исключение и прерывает работу программы.
Благодаря функции makedirs можно создавать сразу несколько новых папок в неограниченном количестве, если предыдущая директория является родительской для следующей. Таким образом, в следующем примере показывается генерация целой цепочки папок из folder, first, second
и third. os.makedirs(r"D:\folder\first\second\third")
Функция удаления директории “remove directory” – rmdir(). os.rmdir("new_directory")
Функция переименования файла или директории rename(). os.rename("old_name.txt", "new_name.txt")
51
Возвращает список файлов и директорий в папке. По умолчанию директория является текущей.
os.scandir(path=".")
Работа с путями (os.path)
Вложенный модуль os.path предоставляет функции для работы с путями к файлам и директориям. Например, для получения абсолютного пути файла или директории используйте функцию abspath():
absolute_path = os.path.abspath("relative_path")
Функция для проверки существования файла или директории – exists():
if os.path.exists("file.txt"): print("Файл существует")
Ниже перечислены несколько полезных команд для работы с путями:
●os.path.dirname(path) - возвращаетимядиректориипути path;
●os.path.exists(path) - возвращает True, если path указы-
вает на существующий путь;
●os.path.getatime(path) - время последнего доступа к файлу, в секундах;
●os.path.getmtime(path) - время последнего изменения файла, в секундах;
●os.path.getctime(path) - время создания файла
(Windows), время последнего изменения файла (Unix);
●os.path.getsize(path) - размер файла в байтах;
●os.path.isabs(path) - является ли путь абсолютным;
●os.path.isfile(path) - является ли путь файлом;
●os.path.isdir(path) - является ли путь директорией;
●os.path.islink(path) - является ли путь символической ссылкой;
●os.path.samefile(path1, path2) - указывают ли path1
и path2 на один и тот же файл или директорию.
52
4.2. SYS
Модуль sys в Python предоставляет разработчику мощный инструментарий для управления взаимодействием программы с интерпретатором и окружением. С его помощью можно обрабатывать параметры командной строки через sys.argv, управлять стандартными потоками ввода, вывода и ошибок, а также изменять путь поиска модулей через
sys.path.
Sys позволяет получать информацию о версии Python и платформе, что полезно для создания кроссплатформенных приложений. Также модуль предоставляет функции для управления внутренними параметрами интерпретатора, например, глубиной рекурсии через sys.setrecursionlimit(). Это делает его незаменимым инструментом для разработки сложных скриптов, утилит и приложений с гибкими настройками.
import sys
Версия Python.
Модуль sys также позволяет определить версию Python, используя ат-
рибут version.
print(sys.version)
Путь к модулям.
Чтобы узнать путь к модулям Python, можно использовать атрибут path:
print(sys.path)
Завершение программы.
Модуль sys предоставляет функцию exit(), которая позволяет завершить выполнение программы с указанным кодом завершения:
sys.exit(0)
Существуют некоторые часто используемые значения кодов выхода. Например, целочисленное значение обычно находится в диапазоне от 0 до 255, а значения от 0 до 127 могут быть зарезервированы для распространенных ситуаций или ошибок. Если это целое число, ноль считается «успешным завершением», а любое ненулевое значение считается «ненормальным завершением» оболочками и т. п.
53
Например:
●0, ни одного: успех
●1: ошибка
●2: ошибки синтаксиса командной строки
●120: ошибка во время очистки процесса.
●255: код выхода вне диапазона.
Работа с I/O.
Модуль sys содержит стандартные потоки ввода, вывода и ошибок:
●sys.stdin — стандартный поток ввода
●sys.stdout — стандартный поток вывода
●sys.stderr — стандартный поток ошибок
sys.stdout.write("Привет, мир!\n") sys.stderr.write("Это сообщение об ошибке\n")
Размер объекта в памяти.
Проблема памяти часто возникает, когда в процессе выполнения программы нужно иметь большое количество объектов, особенно если есть ограничения на общий размер доступной оперативной памяти. В таких случаях, начинается анализ веса используемых структур, и типов данных, и объектов, с целью минимизации затрат. С помощью функции getsizeof() модуля sys можно получить размер объекта в памяти.
a = [1, 2, 3, 4] print(sys.getsizeof(a))
Атрибут maxsize модуля sys представляет собой целое число, дающее максимальное значение, которое может принимать переменная типа Py_ssize_t. Обычно это 32 −1на 32-битной платформе и 2 −1на 64-битной платформе.
4.3. Random
Модуль random в Python предназначен для генерации псевдослучайных чисел.
54
Учёные научились добывать случайные числа из физических процессов окружающего мира с помощью аппаратных генераторов, в которых регистрация определённого физического процесса (отрывание электронов от атомов неона или фиксация хаотично формирующихся кристаллов в химических растворах) конвертировалась в то или иное число – истинно случайное. Со временем, появились генераторы псевдослучайных чисел, которые вместо физических процессов используют детерминированный алгоритм — рассчитывают случайные числа на основе математических формул.
Для получения псевдослучайных чисел Python использует алгоритм «Вихрь Мерсенна». Для понимания его работы можно представить вращающийся вихрь, заполненный числами. Модуль random, “выхватывает” из вихря несколько чисел и создаёт на их основе случайное число. Это случайное число выводится в консоль, а взятые из вихря числа возвращаются, и процесс может повторяться множество раз.
После запуска алгоритм обрабатывает начальное значение (seed), которое в Python можно задать вручную или оставить со значением по умолчанию. Если начальное значение указано вручную, то при каждом запуске алгоритм будет генерировать одинаковую последовательность чисел.Этоможетбытьполезнодляотладкиитестированияприложения, когда нужно много раз воспроизвести код и оценить результаты его работы.
По умолчанию seed явно не указан, и за его основу Python берёт текущее время в операционной системе. Это позволяет при каждом запуске программы видеть новую последовательность случайных чисел.
Функция random() возвращает случайное число с плавающей точкой в промежутке от 0.0 до 1.0. Если же необходимо число из большего диапазона, например от 0 до 100, то можно умножить результат функции random на 100.
import random
number = random.random() # значение от 0.0 до 1.0 print(number)
number = random.random() * 100 # значение от 0.0 до 100.0 print(number)
55
Функция randint(min, max) возвращает случайное целое число в промежутке между двумя значениями min и max.
number = random.randint(20, 35) # значение от 20 до 35
Функция randrange() возвращает случайное целое число из определенного набора чисел. Она имеет три формы:
●randrange(stop): в качестве набора чисел, из которых происходит извлечение случайного значения, будет использоваться диапазон от 0 до числа stop
●randrange(start, stop): набор чисел представляет диапазон от числа start до числа stop
●randrange(start, stop, step): набор чисел представ-
ляет диапазон от числа start до числа stop, при этом каждое число в диапазоне отличается от предыдущего на шаг step
Для работы со списками в модуле random определены две функции: функция shuffle() перемешивает список случайным образом, а функция choice() возвращает один случайный элемент из списка:
numbers = [1, 2, 3, 4, 5, 6, 7, 8] random.shuffle(numbers) print(numbers)
random_number = random.choice(numbers) print(random_number)
4.4. Datetime
Библиотека datetime в Python представляет собой мощный инструмент для работы с датами и временем. Она предоставляет обширный набор классов и функций, которые позволяют эффективно управлять временем, производить его преобразования, арифметические операции и форматирование. Один из главных аспектов datetime — это её универсальность, позволяющая работать как с простыми, так и с более сложными задачами, связанными с обработкой временных данных.
56
Ключевым элементомбиблиотеки являютсяклассы datetime, date,time
иtimedelta. Класс datetime объединяет в себе и дату, и время, что позволяет решать задачи, связанные с полным представлением временных данных. Класс date используется для работы с датой, исключая время, а класс time — для манипулирования только временем, без даты. timedelta необходим для выполнения арифметических операций с датами и временем, таких как вычисление разницы между двумя датами или добавление/вычитание времени.
Одной из особенностей библиотеки является её способность работать с временными зонами. Класс timezone позволяет учитывать смещение относительно универсального времени UTC, что особенно важно при разработке приложений, работающих в разных временных зонах. В Python также поддерживаются различные форматы представления даты
ивремени, что дает возможность преобразовывать временные данные в удобочитаемые строки и наоборот с помощью метода strftime для форматирования и strptime для парсинга.
Преимущество использования datetime заключается в её способности обеспечивать точность при работе с временными данными, а также в наличии инструментов для работы с различными временными форматами.Онапредоставляетвстроенныесредствадлявыполненияопераций над временными интервалами, таких как сложение и вычитание дат, что значительно облегчает задачи, связанные с планированием или анализом временных данных. Благодаря своей гибкости и простоте использования, библиотека datetime стала стандартом для работы с датами и временем в Python, что делает её незаменимым инструментом для разработчиков, решающих задачи, связанные с управлением временем.
●datetime.datetime.now() – текущие дата и время
●получение отдельных полей datetime
now = datetime.datetime.now() print(now)
print("year", now.year) print("month", now.month) print("minute", now.minute)
●datetime.date(year, month, day) – Задание стандартной даты
import datetime
57
d = datetime.date(2012, 12, 14)
print(d.year) # 2012 print(d.day) # 14 print(d.month) # 12
●datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None) – поз-
воляет задавать вручную информацию о дате и времени, которые записываются в переменную в конвертированном в datetime виде
a = datetime.datetime(2017, 3, 5)
print(a) # datetime.datetime(2017, 3, 5, 0, 0)
d = datetime.datetime(2017, 3, 5, 12, 30, 10)
print(d.year) # 2017 print(d.second) # 10 print(d.hour) # 12
●datetime.timedelta описывает определенный период во времени, который находится между двумя различными моментами
|
Операция |
Результат |
|
|
|
|
|
t1 |
= t2 + t3 |
|
Суммирует дельту между датами |
|
|
|
|
t1 |
= t2 -- t3 |
|
Разница дельт между датами |
|
|
|
|
t1 |
= t2 * i |
или |
Умножение дельты на целое число |
t1 |
= i * t2 |
|
|
|
|
||
|
|
|
|
t1 |
= t2 * f |
или |
Дельта умножается на число с плавающей |
t1 |
= f * t2 |
|
точкой |
|
|
|
|
|
|
|
58 |
|
|
Деление общей длительности t2 на интер- |
f = t2 / t3 |
|
вал t3. Возвращает объект с плавающей |
|
|
точкой |
|
|
|
t1 = t2 / f |
или |
Дельта делится на число с плавающей точ- |
t1 = t2 / i |
|
кой или целое |
|
|
|
t1 = t2% t3 |
|
Остаток часть вычисляется как объект |
|
timedelta |
|
|
|
|
|
|
|
|
|
Вычисляет частное и остаток: q = t1 // t2 (3) |
q, r = divmod(t1, t2) |
и r = t1% t2. q — целое число, а r — объект |
|
|
|
deltatime |
|
|
|
+t1 |
|
Возвращает объект timedelta с полностью |
|
идентичным значением t1 |
|
|
|
|
|
|
|
--t1 |
|
Возвращает объект timedelta с полностью |
|
противоположным значением t1 |
|
|
|
|
|
|
|
abs(t) |
|
Возвращает объект timedelta с положитель- |
|
ным значением всех свойств t |
|
|
|
|
|
|
|
str(t) |
|
Возвращает строковое представление объ- |
|
екта a в формате, заданном по умолчанию |
|
|
|
|
|
|
|
|
|
Возвращает строковое представление объ- |
repr(t) |
|
екта a в формате с отрицательными значе- |
|
|
ниями |
|
|
|
Например, вычисление вчерашней и завтрашней даты можно осуще-
ствить через timedelta():
today = datetime.date.today() print(today)
yesterday = today - datetime.timedelta(days=1) print(yesterday)
59
tomorrow = today + datetime.timedelta(days=1) print(tomorrow)
● сколько времени прошло между указанными событиями:
event1 = datetime.datetime(year=2018, month=12, day=24, hour=11)
event2 = datetime.datetime(year=2018, month=11, day=22)
delta = event1-event2 print(delta) print(delta.days)
● .weekday – Получение дня недели
today = datetime.date.today() print(today.weekday)
Программа выводит цифры 0–6, означающие понедельник – воскресенье соответственно.
● смена формата даты
now = datetime.datetime.now() formatted_date_1 = now.strftime("%d/%m/%Y") print(formatted_date_1)
4.5. Numpy
NumPy — это мощная библиотека Python для работы с многомерными массивами и числовыми данными. Она была создана для выполнения быстрых и эффективных вычислений, что делает её важным инструментом для научных исследований, машинного обучения и анализа данных. Основное преимущество NumPy заключается в её массиве (ndarray), который является более эффективной и функциональной заменой стандартных списков Python. Например. он выполняет арифметические операции поэлементно между массивами, что отличается от поведения стандартных списков Python, где аналогичные операции (напри-
60
