Напишите программу, которая принимает в качестве аргумента имя файла (если файл не указан или указан несуществующий

  • 14
Напишите программу, которая принимает в качестве аргумента имя файла (если файл не указан или указан несуществующий - возникает ошибка) и выводит содержимое этого файла на экран. Кроме того, программа может принимать дополнительные аргументы: "--count" для вывода количества строк в конце сообщения, "--num" для вывода порядкового номера с пробелом в начале каждой строки, "--sort" для сортировки строк в алфавитном порядке перед выводом. Предположим, что файл с именем text1.txt содержит следующие строки: Houston we have a problem Пример 1: Ввод Вывод python3 solution.py --num text1.txt 0 Houston 1 we have 2 a problem Пример 2: Ввод Вывод python3 ...
Volk
67
Хорошо, давайте разберемся с этой задачей пошагово.

1. Сначала, нам нужно принять имя файла в качестве аргумента. Для этого воспользуемся объектом `argparse`, который позволит нам работать с аргументами командной строки в Python.

python
import argparse
parser = argparse.ArgumentParser(description="Программа для чтения содержимого файла.")
parser.add_argument("filename", type=str, help="Имя файла для чтения")
parser.add_argument("--count", action="store_true", help="Вывод количества строк в конце сообщения")
parser.add_argument("--num", action="store_true", help="Вывод порядкового номера с пробелом в начале каждой строки")
parser.add_argument("--sort", action="store_true", help="Сортировка строк в алфавитном порядке перед выводом")
args = parser.parse_args()


2. Далее, нам нужно открыть файл и прочитать его содержимое. Мы будем использовать блок `try-except` для обработки возможных ошибок при открытии файла.

python
try:
with open(args.filename, "r") as file:
lines = file.readlines()
except FileNotFoundError:
print(f"Ошибка: Файл "{args.filename}" не найден.")
exit()


3. Если аргумент `--sort` был указан, отсортируем строки в алфавитном порядке.

python
if args.sort:
lines.sort()


4. Далее, нужно выводить строки с использованием порядкового номера и пробела, если аргумент `--num` был указан.

python
output = ""
for i, line in enumerate(lines):
if args.num:
output += f"{i} {line}"
else:
output += line


5. Наконец, выводим содержимое файла и, при наличии аргумента `--count`, выводим количество строк.

python
print(output)
if args.count:
print(f"Количество строк: {len(lines)}")


Это всё! Вот полный код программы:

python
import argparse

parser = argparse.ArgumentParser(description="Программа для чтения содержимого файла.")
parser.add_argument("filename", type=str, help="Имя файла для чтения")
parser.add_argument("--count", action="store_true", help="Вывод количества строк в конце сообщения")
parser.add_argument("--num", action="store_true", help="Вывод порядкового номера с пробелом в начале каждой строки")
parser.add_argument("--sort", action="store_true", help="Сортировка строк в алфавитном порядке перед выводом")
args = parser.parse_args()

try:
with open(args.filename, "r") as file:
lines = file.readlines()
except FileNotFoundError:
print(f"Ошибка: Файл "{args.filename}" не найден.")
exit()

if args.sort:
lines.sort()

output = ""
for i, line in enumerate(lines):
if args.num:
output += f"{i} {line}"
else:
output += line

print(output)
if args.count:
print(f"Количество строк: {len(lines)}")


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


python3 solution.py --num text1.txt


Программа выведет содержимое файла с порядковыми номерами на каждой строке, как в вашем примере.

Пожалуйста, дайте мне знать, если у вас возникнут дополнительные вопросы!