Работа с файлами в Python: Полное руководство для начинающих

Узнайте, как читать, записывать и управлять файлами в Python. Подробное руководство с примерами кода: открытие файлов, чтение и запись данных, работа с CSV и JSON, обработка ошибок. Идеально для новичков в программировании.

ОсновыРазработкаPython

6 мин

Открытие файлов

Для работы с файлами в Python используется встроенная функция open(). Основной синтаксис:

file = open('filename.txt', 'mode')

Основные режимы открытия:

  • 'r' — чтение (read). Файл должен существовать

  • 'w' — запись (write). Создаёт новый файл или перезаписывает существующий

  • 'a' — добавление (append). Дописывает данные в конец файла

  • 'r+' — чтение и запись

  • 'b' — бинарный режим (например, 'rb' или 'wb')

Чтение файлов

Чтение всего содержимого:

with open('example.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print(content)

Чтение построчно:

with open('example.txt', 'r', encoding='utf-8') as file:
    for line in file:
        print(line.strip())  # strip() убирает символы переноса строки

Чтение всех строк в список:

with open('example.txt', 'r', encoding='utf-8') as file:
    lines = file.readlines()
    print(lines)

Запись в файлы

Запись текста (перезапись файла):

with open('output.txt', 'w', encoding='utf-8') as file:
    file.write('Привет, мир!\n')
    file.write('Это вторая строка.')

Добавление текста в конец файла:

with open('output.txt', 'a', encoding='utf-8') as file:
    file.write('\nДополнительная строка')

Запись списка строк:

lines = ['Первая строка\n', 'Вторая строка\n', 'Третья строка\n']
with open('output.txt', 'w', encoding='utf-8') as file:
    file.writelines(lines)

Конструкция with

Использование with — это лучшая практика при работе с файлами. Она автоматически закрывает файл после выполнения блока кода, даже если произошла ошибка.

Без with (не рекомендуется):

file = open('example.txt', 'r')
content = file.read()
file.close()  # Нужно не забыть закрыть файл!

С with (рекомендуется):

with open('example.txt', 'r') as file:
    content = file.read()
# Файл автоматически закрыт после выхода из блока

Работа с путями к файлам

Для удобной работы с путями используйте модуль pathlib:

from pathlib import Path

# Создание пути
file_path = Path('folder') / 'subfolder' / 'file.txt'

# Проверка существования
if file_path.exists():
    print('Файл существует')

# Чтение файла
content = file_path.read_text(encoding='utf-8')

# Запись в файл
file_path.write_text('Новое содержимое', encoding='utf-8')

Обработка ошибок

При работе с файлами важно обрабатывать возможные ошибки:

try:
    with open('nonexistent.txt', 'r', encoding='utf-8') as file:
        content = file.read()
except FileNotFoundError:
    print('Файл не найден')
except PermissionError:
    print('Нет прав доступа к файлу')
except Exception as e:
    print(f'Произошла ошибка: {e}')

Работа с CSV файлами

Python имеет встроенный модуль csv для работы с CSV файлами:

import csv

# Чтение CSV
with open('data.csv', 'r', encoding='utf-8') as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)

# Запись CSV
data = [
    ['Имя', 'Возраст', 'Город'],
    ['Алексей', '25', 'Москва'],
    ['Мария', '30', 'Санкт-Петербург']
]

with open('output.csv', 'w', encoding='utf-8', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)

Работа с JSON файлами

Для работы с JSON используется модуль json:

import json

# Чтение JSON
with open('data.json', 'r', encoding='utf-8') as file:
    data = json.load(file)
    print(data)

# Запись JSON
data = {
    'name': 'Иван',
    'age': 28,
    'skills': ['Python', 'JavaScript']
}

with open('output.json', 'w', encoding='utf-8') as file:
    json.dump(data, file, ensure_ascii=False, indent=4)

Практические примеры

Подсчёт количества строк в файле:

with open('example.txt', 'r', encoding='utf-8') as file:
    line_count = sum(1 for line in file)
    print(f'Количество строк: {line_count}')

Поиск слова в файле:

search_word = 'Python'
with open('example.txt', 'r', encoding='utf-8') as file:
    for line_number, line in enumerate(file, 1):
        if search_word in line:
            print(f'Найдено в строке {line_number}: {line.strip()}')

Копирование файла:

with open('source.txt', 'r', encoding='utf-8') as source:
    with open('destination.txt', 'w', encoding='utf-8') as destination:
        destination.write(source.read())

Полезные советы

Всегда указывайте кодировку. Используйте encoding='utf-8' для корректной работы с русским текстом.

Используйте with для автоматического закрытия файлов. Это предотвращает утечки ресурсов и потерю данных.

Обрабатывайте исключения. Файлы могут не существовать, быть заблокированными или у вас может не быть прав доступа.

Проверяйте существование файлов. Перед чтением убедитесь, что файл существует, используя Path.exists() или обработку исключений.

Будьте осторожны с большими файлами. Метод read() загружает весь файл в память. Для больших файлов лучше читать построчно.

Заключение

Работа с файлами в Python проста и интуитивно понятна. Основные принципы: используйте конструкцию with, не забывайте об обработке ошибок и правильно выбирайте режим открытия файла. С этими знаниями вы готовы эффективно работать с файлами в своих проектах!

Кодик — это дружелюбное сообщество разработчиков, где каждый может учиться программированию, делиться опытом и получать поддержку от единомышленников. Мы создали пространство, где новички чувствуют себя комфортно задавать любые вопросы, а опытные программисты с радостью делятся знаниями и помогают расти.

Присоединяйся к Кодику — здесь код пишется легче, а обучение проходит в атмосфере взаимопомощи и вдохновения!

Комментарии