Как в Python читать данные из файла?

Ответ

В Python для чтения данных из файлов используются различные подходы, выбор которых зависит от размера файла и требуемого способа обработки данных. Всегда рекомендуется использовать контекстный менеджер with для автоматического закрытия файла и корректной обработки ресурсов.

Основные способы:

  1. Чтение всего файла целиком (.read()):

    • Когда использовать: Для небольших файлов, когда весь контент нужен сразу как одна строка.
    • Пример:
      with open('file.txt', 'r', encoding='utf-8') as f:
      content = f.read() # Читает весь файл как одну строку
      print(content)
  2. Чтение файла построчно (итерация по файловому объекту):

    • Когда использовать: Наиболее эффективный и рекомендуемый способ для обработки больших текстовых файлов, так как читает файл построчно, не загружая весь контент в память.
    • Пример:
      with open('file.txt', 'r', encoding='utf-8') as f:
      for line in f:
          print(line.strip()) # Обработка каждой строки, .strip() удаляет перенос строки
  3. Чтение всех строк в список (.readlines()):

    • Когда использовать: Когда нужно получить все строки файла в виде списка строк. Подходит для файлов среднего размера, так как загружает весь файл в память.
    • Пример:
      with open('file.txt', 'r', encoding='utf-8') as f:
      lines = f.readlines() # Возвращает список строк
      for line in lines:
      print(line.strip())
  4. Чтение фиксированного количества байт (.read(size)):

    • Когда использовать: Для работы с бинарными файлами или когда нужно читать файл блоками (чанками) определенного размера, например, при потоковой обработке.
    • Пример:
      with open('image.bin', 'rb') as f:
      chunk = f.read(1024) # Читает 1024 байта
      while chunk:
          # Обработка chunk
          print(f"Прочитано {len(chunk)} байт")
          chunk = f.read(1024)

Важно: При работе с текстовыми файлами всегда указывайте кодировку (encoding='utf-8') для предотвращения ошибок.

Ответ 18+ 🔞

Э, слушай, а вот этот твой Python, он же, блядь, как швейцарский нож — для всего дырку найдёт. Особенно когда файлы читать надо. Тут главное — не накосячить и ресурсы не проебать, как последний распиздяй. Поэтому первое и святое правило, которое даже младенец должен зубрить:

Всегда пихай файл в with open(...) as f:! Это как контекстный менеджер, ёпта, он сам закроет файл, даже если ты посередине чтения обосрёшься с ошибкой. Красота, а не жизнь.

А дальше уже смотри, что за файл тебе подсунули:

1. Если файл — мелкая сопляка (.read())

Представь, файлик на пару килобайт, как записка от мамки в школу. Его можно, сука, целиком в память загнать и не париться.

with open('file.txt', 'r', encoding='utf-8') as f:
    content = f.read()  # Всё, блядь, схватил одним махом!
print(content)

Работает, но если файл размером с "Войну и мир", то оперативка тебе спасибо не скажет — сожрёт и не подавится.

2. Нормальный, адекватный способ для больших текстов (итерация по строкам)

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

with open('file.txt', 'r', encoding='utf-8') as f:
    for line in f:  # Берёт по строчке, как в столовой пюрешку
        print(line.strip())  # .strip() — чтобы эти ебучие переносы строк отрезать

Чисто, аккуратно, без геморроя. Рекомендую, как родной.

3. Если хочешь все строки в кучу собрать (.readlines())

Допустим, файл не ахти какой большой, но тебе нужно, чтобы все строки были в списке, прямо вот щас, чтобы по индексу тыкать.

with open('file.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()  # Получаешь список, где каждый элемент — строка
for line in lines:
    print(line.strip())

Работает, но опять же — весь файл в памяти. Если строк овердохуища, то лучше способ №2.

4. Для бинарников или когда читать по кускам (.read(size))

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

with open('image.bin', 'rb') as f:  # 'rb' — это, блядь, binary mode, не забудь!
    chunk = f.read(1024)  # Читаем первый кусок в 1024 байта
    while chunk:  # Пока кусок не пустой
        # Делай с ним что хочешь, хоть в космос отправляй
        print(f"Прочитано {len(chunk)} байт")
        chunk = f.read(1024)  # Читаем следующий кусок

Вот так, блядь, можно хоть гигабайтный файл обработать, не нагружая память.

И последнее, на чём споткнулось дохуя народу: всегда, сука, указывай кодировку encoding='utf-8' для текстовых файлов! А то потом будешь сидеть и гадать, почему вместо русского текста у тебя кракозябры, как будто кот по клавиатуре прошелся. Пидарасы налетели, одним словом.

Выбирай способ под задачу и не выёбывайся. Всё гениальное — просто, как три копейки.