Если вы хотите быстро найти пример использования модуля collections или разобраться, как работает itertools, эта книга станет вашим надежным помощником. Второе издание обновлено и дополнено актуальными примерами, которые помогут вам освоить стандартную библиотеку Python 3 на практике.
Книга структурирована так, что вы легко найдете нужный модуль или функцию. Каждый раздел содержит краткое описание, пример кода и пояснения. Например, вы узнаете, как использовать deque для эффективной работы с очередями или как применять defaultdict для упрощения работы со словарями.
Особое внимание уделено модулям, которые часто используются в реальных проектах: os, sys, re и другие. Вы найдете примеры, которые помогут вам автоматизировать задачи, работать с файловой системой и обрабатывать текстовые данные. Книга также охватывает менее известные, но полезные модули, такие как functools и contextlib.
Если вы уже знакомы с основами Python, но хотите глубже изучить его стандартную библиотеку, это издание станет вашим справочником. Практические примеры помогут вам быстрее разобраться в возможностях языка и применять их в своих проектах.
Работа с файловой системой
Для работы с файлами и директориями в Python используйте модуль os и pathlib. Модуль os предоставляет функции для взаимодействия с операционной системой, а pathlib предлагает объектно-ориентированный подход к работе с путями.
Чтобы создать директорию, вызовите os.mkdir(‘имя_папки’). Если нужно создать несколько вложенных папок, используйте os.makedirs(‘путь/к/папке’). Для удаления директории подойдет os.rmdir(‘имя_папки’), а для рекурсивного удаления – shutil.rmtree(‘путь/к/папке’).
Для проверки существования файла или директории примените os.path.exists(‘путь’). Чтобы узнать, является ли объект файлом, используйте os.path.isfile(‘путь’), а для проверки директории – os.path.isdir(‘путь’).
С модулем pathlib работа становится проще. Создайте объект пути: path = Path(‘путь/к/файлу’). Для создания директории вызовите path.mkdir(), а для удаления – path.rmdir(). Проверить существование можно через path.exists().
Для чтения и записи файлов используйте встроенные функции open(). Откройте файл в режиме чтения: with open(‘файл.txt’, ‘r’) as file:. Для записи данных примените режим ‘w’ или ‘a’. Режим ‘w’ перезаписывает файл, а ‘a’ добавляет данные в конец.
Для получения списка файлов и папок в директории вызовите os.listdir(‘путь’) или используйте Path(‘путь’).iterdir() с pathlib. Это позволяет легко итерироваться по содержимому директории.
Если нужно переместить или переименовать файл, воспользуйтесь os.rename(‘старый_путь’, ‘новый_путь’) или shutil.move(‘старый_путь’, ‘новый_путь’). Для копирования файлов примените shutil.copy(‘исходный_файл’, ‘целевой_файл’).
Чтобы получить абсолютный путь, используйте os.path.abspath(‘относительный_путь’) или Path(‘относительный_путь’).resolve(). Это помогает избежать ошибок при работе с относительными путями.
Для работы с временными файлами и директориями подойдет модуль tempfile. Создайте временный файл: tempfile.NamedTemporaryFile(), или временную директорию: tempfile.TemporaryDirectory(). Они автоматически удаляются после завершения работы.
Чтение и запись текстовых файлов
Для открытия текстового файла используйте функцию open()
, указав путь к файлу и режим работы. Например, режим 'r'
открывает файл для чтения, а 'w'
– для записи. Если файл не существует, режим 'w'
создаст его. Для добавления данных в конец файла используйте режим 'a'
.
Прочитайте содержимое файла с помощью метода read()
. Если файл большой, лучше использовать readline()
для построчного чтения или readlines()
для получения списка строк. Например, with open('file.txt', 'r') as file: lines = file.readlines()
сохранит все строки в переменной lines
.
Для записи данных в файл примените метод write()
. Убедитесь, что открыли файл в режиме записи или добавления. Например, with open('file.txt', 'w') as file: file.write('Новая строка')
перезапишет содержимое файла. Если нужно добавить текст, используйте режим 'a'
.
Работайте с файлами внутри блока with
, чтобы автоматически закрыть файл после завершения операций. Это предотвращает утечки ресурсов и ошибки. Например, with open('file.txt', 'r') as file: data = file.read()
гарантирует корректное закрытие файла.
Для обработки текстовых данных в кодировке, отличной от UTF-8, укажите параметр encoding
в функции open()
. Например, open('file.txt', 'r', encoding='windows-1251')
подходит для чтения файлов в кодировке Windows-1251.
Управление путями с помощью модуля pathlib
Используйте модуль pathlib
для работы с путями в Python. Он предоставляет объектно-ориентированный подход, который упрощает манипуляции с файловыми путями. Например, создайте объект Path
для текущего файла:
from pathlib import Path
file_path = Path(__file__)
Для получения абсолютного пути вызовите метод absolute()
:
absolute_path = file_path.absolute()
Чтобы объединить пути, используйте оператор /
:
new_path = file_path.parent / 'subdirectory' / 'file.txt'
Проверьте существование файла или директории с помощью метода exists()
:
if new_path.exists():
print("Файл или директория существует")
Для создания директории вызовите mkdir()
. Добавьте параметр parents=True
, если нужно создать все родительские директории:
new_path.mkdir(parents=True, exist_ok=True)
Чтобы прочитать содержимое файла, используйте метод read_text()
:
content = new_path.read_text(encoding='utf-8')
Для записи данных в файл примените write_text()
:
new_path.write_text("Новый текст", encoding='utf-8')
Модуль также поддерживает получение информации о файле. Например, используйте stat()
для получения размера и времени изменения:
file_info = new_path.stat()
print(f"Размер файла: {file_info.st_size} байт")
print(f"Время изменения: {file_info.st_mtime}")
Для работы с расширениями файлов используйте свойства suffix
и stem
:
print(f"Расширение файла: {new_path.suffix}")
print(f"Имя файла без расширения: {new_path.stem}")
Модуль pathlib
поддерживает итерацию по содержимому директории. Например, выведите все файлы в текущей директории:
for item in Path('.').iterdir():
print(item)
Используйте glob()
для поиска файлов по шаблону. Например, найдите все текстовые файлы:
for text_file in Path('.').glob('*.txt'):
print(text_file)
Модуль pathlib
делает работу с путями интуитивно понятной и удобной. Встроенные методы упрощают выполнение типичных задач, таких как создание директорий, чтение файлов и управление путями.
Поиск файлов и каталогов
Для поиска файлов и каталогов в Python используйте модуль os
и glob
. Они предоставляют простые и гибкие инструменты для работы с файловой системой.
- Используйте
os.walk()
, чтобы рекурсивно обойти все каталоги. Этот метод возвращает кортежи с путями, списками подкаталогов и файлов. - Для поиска файлов по шаблону применяйте
glob.glob()
. Например,glob.glob('*.txt')
найдет все текстовые файлы в текущей директории. - Если нужно проверить существование файла или каталога, используйте
os.path.exists()
.
Пример поиска всех файлов с расширением .py
в текущей директории и её подкаталогах:
import os
import glob
for root, dirs, files in os.walk('.'):
for file in glob.glob(os.path.join(root, '*.py')):
print(file)
Для работы с путями используйте модуль os.path
. Он позволяет объединять пути, извлекать имена файлов и проверять их свойства.
os.path.join()
объединяет части пути, учитывая особенности операционной системы.os.path.basename()
возвращает имя файла из полного пути.os.path.isdir()
проверяет, является ли путь каталогом.
Пример проверки, является ли объект каталогом:
import os
path = 'example_directory'
if os.path.isdir(path):
print(f'{path} – это каталог.')
Эти инструменты помогут быстро находить и анализировать файлы и каталоги в ваших проектах.
Обработка данных с помощью стандартных модулей
Для работы с CSV-файлами используйте модуль csv. Он позволяет читать и записывать данные в формате CSV, автоматически обрабатывая разделители и кавычки. Например, чтобы прочитать файл, вызовите csv.reader и передайте файловый объект. Для записи данных применяйте csv.writer.
Если нужно обработать JSON, подключите модуль json. Метод json.load загружает данные из файла, а json.dump сохраняет их. Для работы со строками используйте json.loads и json.dumps.
Для анализа и фильтрации данных применяйте модуль itertools. Функция itertools.islice помогает извлекать срезы из итерируемых объектов, а itertools.filterfalse отсеивает элементы, не соответствующие условию.
Модуль collections предоставляет полезные структуры данных. Например, Counter подсчитывает количество вхождений элементов в списке, а defaultdict задаёт значения по умолчанию для отсутствующих ключей.
Для работы с датами и временем используйте модуль datetime. Класс datetime позволяет создавать объекты с точностью до микросекунд, а timedelta помогает вычислять разницу между датами.
Если требуется обработка больших объёмов данных, подключите модуль multiprocessing. Он распределяет задачи между процессами, ускоряя выполнение операций. Используйте Pool для параллельного выполнения функций.
Для работы с регулярными выражениями применяйте модуль re. Функция re.search ищет совпадения в строке, а re.sub заменяет найденные фрагменты на указанные значения.
Использование модуля json для работы с JSON
Для работы с JSON в Python применяйте модуль json
. Он позволяет легко преобразовывать данные между форматами JSON и Python. Например, чтобы загрузить JSON-строку в объект Python, используйте метод json.loads()
:
import json
data = '{"name": "John", "age": 30}'
parsed_data = json.loads(data)
Для записи объекта Python в JSON-строку применяйте метод json.dumps()
. Он автоматически преобразует словари, списки и другие типы данных в JSON:
data = {"name": "John", "age": 30}
json_string = json.dumps(data)
Если нужно работать с файлами, используйте json.load()
и json.dump()
. Эти методы позволяют читать и записывать JSON-данные напрямую в файлы:
# Запись в файл
with open('data.json', 'w') as file:
json.dump(data, file)
# Чтение из файла
with open('data.json', 'r') as file:
loaded_data = json.load(file)
print(loaded_data)
json_string = json.dumps(data, indent=4, sort_keys=True)
print(json_string)
Для обработки сложных объектов, таких как пользовательские классы, используйте параметр default
в json.dumps()
. Он позволяет указать функцию для сериализации нестандартных типов:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def serialize_person(obj):
if isinstance(obj, Person):
return {"name": obj.name, "age": obj.age}
raise TypeError("Type not serializable")
person = Person("John", 30)
json_string = json.dumps(person, default=serialize_person)
Модуль json
также поддерживает обработку ошибок. Если JSON-строка некорректна, будет вызвано исключение json.JSONDecodeError
. Обрабатывайте его для предотвращения сбоев:
try:
parsed_data = json.loads('{"name": "John", "age": 30')
except json.JSONDecodeError as e:
print(f"Ошибка при разборе JSON: {e}")
Используйте таблицу ниже для быстрого сравнения основных методов модуля json
:
Метод
Описание
json.loads()
Преобразует JSON-строку в объект Python.
json.dumps()
Преобразует объект Python в JSON-строку.
json.load()
Читает JSON-данные из файла.
json.dump()
Записывает JSON-данные в файл.
Модуль json
прост в использовании и эффективен для работы с JSON-данными в Python. Применяйте его для сериализации и десериализации данных в ваших проектах.
Статистический анализ с помощью модуля statistics
Используйте модуль statistics
для быстрого вычисления базовых статистических показателей. Этот модуль входит в стандартную библиотеку Python, что делает его доступным без установки дополнительных пакетов.
- Среднее значение: Для расчета среднего арифметического используйте функцию
mean()
. Например, statistics.mean([1, 2, 3, 4, 5])
вернет 3.0
.
- Медиана: Функция
median()
вычисляет медиану списка. Для списка [1, 3, 5, 7, 9]
результат будет 5
.
- Мода: Чтобы найти наиболее часто встречающееся значение, вызовите
mode()
. Например, statistics.mode([1, 1, 2, 3])
вернет 1
.
Для работы с более сложными задачами модуль предлагает дополнительные функции:
- Стандартное отклонение: Используйте
stdev()
для расчета стандартного отклонения. Например, statistics.stdev([1, 2, 3, 4, 5])
вернет 1.5811388300841898
.
- Дисперсия: Функция
variance()
вычисляет дисперсию. Для списка [1, 2, 3, 4, 5]
результат будет 2.5
.
- Квантили: Для расчета квантилей используйте
quantiles()
. Например, statistics.quantiles([1, 2, 3, 4, 5], n=4)
вернет [1.5, 3.0, 4.5]
.
Модуль также поддерживает работу с числами с плавающей точкой и целыми числами, что делает его универсальным инструментом для анализа данных. Например, для расчета среднего значения списка, содержащего как целые, так и дробные числа, достаточно передать их в функцию mean()
.
Для повышения точности расчетов используйте функции fmean()
и geometric_mean()
, которые предназначены для работы с большими наборами данных и вычисления среднего геометрического соответственно.
Если данные содержат пропущенные значения или нечисловые элементы, предварительно очистите их, чтобы избежать ошибок. Например, используйте фильтрацию списка перед передачей в функции модуля.
Парсинг CSV файлов с помощью модуля csv
Для чтения CSV файлов в Python используйте модуль csv
. Откройте файл с помощью open()
и передайте его в csv.reader
. Это создаст объект, который позволяет итерироваться по строкам файла как по спискам.
Пример чтения файла:
import csv
with open('data.csv', 'r', newline='', encoding='utf-8') as file:
reader = csv.reader(file)
for row in reader:
print(row)
Если CSV файл содержит заголовки, используйте csv.DictReader
. Он преобразует каждую строку в словарь, где ключи – это заголовки столбцов.
Пример с DictReader
:
with open('data.csv', 'r', newline='', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
print(row['column_name'])
Для записи данных в CSV файл примените csv.writer
или csv.DictWriter
. Укажите файл и, при необходимости, заголовки столбцов.
Пример записи:
with open('output.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['Header1', 'Header2'])
writer.writerow(['Value1', 'Value2'])
Если данные представлены в виде словарей, используйте csv.DictWriter
:
with open('output.csv', 'w', newline='', encoding='utf-8') as file:
fieldnames = ['Header1', 'Header2']
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'Header1': 'Value1', 'Header2': 'Value2'})
Для работы с разделителями, отличными от запятой, укажите параметр delimiter
в csv.reader
или csv.writer
. Например, для табуляции используйте delimiter='t'
.
Пример с кастомным разделителем:
with open('data.tsv', 'r', newline='', encoding='utf-8') as file:
reader = csv.reader(file, delimiter='t')
for row in reader:
print(row)
Модуль csv
также поддерживает обработку кавычек и экранирование символов. Используйте параметры quotechar
и quoting
, чтобы настроить поведение при чтении или записи.
Пример с кавычками:
with open('data.csv', 'r', newline='', encoding='utf-8') as file:
reader = csv.reader(file, quotechar='"', quoting=csv.QUOTE_MINIMAL)
for row in reader:
print(row)
Эти инструменты позволяют гибко работать с CSV файлами, адаптируя их под конкретные задачи.
Работа с датой и временем через модуль datetime
Для работы с датой и временем в Python используйте модуль datetime
. Он предоставляет классы для манипуляции датами, временем и их комбинациями. Основные классы: date
, time
, datetime
и timedelta
.
Создайте объект даты с помощью datetime.date(year, month, day)
. Например, чтобы получить дату 15 октября 2023 года, выполните:
import datetime
date_obj = datetime.date(2023, 10, 15)
Для работы с временем используйте datetime.time(hour, minute, second)
. Пример:
time_obj = datetime.time(14, 30, 45)
Чтобы объединить дату и время, применяйте datetime.datetime(year, month, day, hour, minute, second)
:
datetime_obj = datetime.datetime(2023, 10, 15, 14, 30, 45)
Для вычисления разницы между датами используйте timedelta
. Например, чтобы добавить 5 дней к текущей дате:
from datetime import timedelta
today = datetime.date.today()
future_date = today + timedelta(days=5)
print(future_date)
Модуль также поддерживает форматирование дат и времени. Используйте метод strftime
для преобразования объекта в строку:
formatted_date = datetime_obj.strftime("%d.%m.%Y %H:%M")
Для парсинга строки в объект datetime
применяйте strptime
:
parsed_date = datetime.datetime.strptime("15.10.2023 14:30", "%d.%m.%Y %H:%M")
Основные форматы для strftime
и strptime
:
Код
Значение
%Y
Год (4 цифры)
%m
Месяц (01-12)
%d
День (01-31)
%H
Час (00-23)
%M
Минута (00-59)
%S
Секунда (00-59)
Используйте эти инструменты для эффективной работы с датами и временем в ваших проектах.