Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3589380
А
Аноним
22 марта 2026 17:57 · публичный вопрос
А
Аноним

напиши программу на питоне для файла

Ответ нейросети
22 марта 2026 17:57

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

Что делает программа

  • Принимает путь к файлу.
  • Определяет, является ли файл текстовым или бинарным.
  • Если текстовый: подсчитывает количество строк, слов и символов (строки читаются по мере обработки файла, чтобы экономить память).
  • Если бинарный: выводит размер файла в байтах.
  • Выводит результат в понятном виде.

Почему так:

  • Это универсальная задача на работу с файлами и хорошо подходит для учебной среды.
  • Обработка по строкам позволяет работать с большими файлами без загрузки всего содержания в память.

Как запустить

  • Сохраните код в файл, например, file_stats.py.
  • В командной строке выполните: python file_stats.py путь/к/файлу
  • Пример: python file_stats.py document.txt

Код

import os
import sys
import argparse

def is_binary(path: str, test_size: int = 4096) -> bool:
    """
    Примерно определяет, является ли файл бинарным.
    Считываем небольшой бинарный блок и смотрим наличие нулевых байтов.
    """
    try:
        with open(path, 'rb') as f:
            chunk = f.read(test_size)
            return b'\x00' in chunk
    except Exception:
        # В случае ошибки доступа к файлу считаем бинарным как запасной вариант
        return True

def analyze_text_file(path: str) -> dict:
    """
    Анализирует текстовый файл в режиме построчного чтения (чтобы не загружать всё сразу).
    Подсчитывает строки, слова и символы. Предполагается кодировка UTF-8.
    """
    line_count = 0
    word_count = 0
    char_count = 0
    encoding = 'utf-8'  # предполагаемая кодировка

    try:
        with open(path, 'r', encoding=encoding, errors='replace') as f:
            for line in f:
                line_count += 1
                char_count += len(line)
                word_count += len(line.split())
    except UnicodeDecodeError:
        # Если UTF-8 не подходит, попробуем другую кодировку
        # Если не найдено подходящей кодировки, вернуть сообщение
        raise

    return {
        'type': 'text',
        'lines': line_count,
        'words': word_count,
        'chars': char_count,
        'encoding': encoding
    }

def analyze_file(path: str) -> dict:
    """
    Главная функция анализа файла: определяет тип и запускает соответствующий анализ.
    """
    if not os.path.exists(path):
        raise FileNotFoundError(f"Файл не найден: {path}")

    if is_binary(path):
        size = os.path.getsize(path)
        return {'type': 'binary', 'size_bytes': size}
    else:
        return analyze_text_file(path)

def main():
    parser = argparse.ArgumentParser(
        description="Подсчитать статистику файла: строки/слова/символы (для текстовых файлов) или размер для бинарных."
    )
    parser.add_argument('path', help="Путь к файлу")
    args = parser.parse_args()

    result = analyze_file(args.path)

    if result['type'] == 'binary':
        print(f"Файл является бинарным. Размер: {result['size_bytes']} байт.")
    else:
        print("Тип файла: текстовый (кодировка: {})".format(result['encoding']))
        print(f"Строк: {result['lines']}")
        print(f"Слова: {result['words']}")
        print(f"Символы: {result['chars']}")

if __name__ == '__main__':
    main()

Пояснения к коду

  • Функция is_binary читает первые 4 КБ файла и ищет нулевые байты. Наличие нулевых байтов чаще встречается в бинарных файлах и редко в чистом тексте.
  • Если файл считан как текст, подсчитываются:
    • строки: количество линий в файле
    • слова: количество элементов, полученных разбиением по whitespace на каждой строке
    • символы: общее количество символов в строках
  • Код рассчитан на умеренно большие файлы и не загружает весь файл в память целиком.
  • В случае несовместимости кодировок можно расширить программу поддержкой нескольких кодировок (например, через argparse и параметр --enc).

Если хотите, могу адаптировать программу под конкретный формат файла (CSV/JSON) или добавить дополнительные функции (например, подсчёт уникальных слов, поиск по шаблону и т.д.). Сообщите параметры файла, и я подстрою решение под задачу.