Ниже описана минимальная теория, которая может пригодиться во время выполнения лабораторной. Более подробную информацию смотрите в лекциях по курсу и в разделе "полезные ссылки".
Для чтения из файла необходимо открыть файловый поток, вызвав функцию open():
file = open("file_name.txt", "r")"file_name.txt" - путь к файлу;
"r" - режим чтения файла (read);
file - переменная файлового потока.
Считать информацию из файла можно, использовав один из следующих методов файлового потока:
-
readline()- считывает одну строку из файла -
read()- считывает все содержимое файла в одну строку -
readlines()- считывает все строки файла в список
После чтения файловый поток необходимо закрыть с помощью метода close():
file.close()Однако, более оптимальным вариантом будет использование конструкции with, которая автоматически закроет файловый поток:
with open("my_file.txt", "r") as file:
text = file.read()Для передачи аргументов черезз командную строку используется встроенный модуль argparse:
import argparseПример использования:
import argparse
parser = argparse.ArgumentParser() # создание экземпляра парсера
parser.add_argument('name', type=str, help='your name') # добавление позиционного аргумента командной строки
args = parser.parse_args() # парсинг аргументов
print(f"Hello, {args.name}!") # использование полученного значения аргумента'name' - название аргумента (обязательный параметр)
type - тип данных аргумента (необязательный параметр)
help - подсказка для аргумента (необязательный параметр)
Запуск программы:
python my_program.py Ivan
Hello, Ivan!
Аргументов командной строки может быть любое количество, они могут быть позиционные (обязательные) и необязательные. Необязательный аргумент добавляется следующим образом:
parser.add_argument("-s", "--surname", type=str, help="your surname")"--surname" - полное название аргумента (обязательный параметр)
"-s" - сокращённое название (необязательный параметр)
В командной строке для добавления необязательного аргумента необходимо указать либо полное, либо сокращённое название:
my_program.py Ivan -s Ivanov
или
my_program.py Ivan -surname Ivanov
Также перед использованием необходимо проверять, существует ли такой аргумент:
if args.surname is not None: # проверка на существование значения
print(f"Hello, {args.name} {args.surname}!")
else:
print(f"Hello, {args.name}!")Регулярные выражения в Python используются для поиска, обработки и манипуляции строками, соответствующими заданным шаблонам. Шаблоном для регулярных выражений может считаться любая строка - в этом случае будет выполнен обычный поиск по подстроке. Если же мы хотим создать более сложный шаблон, то необходимо использовать спецсимволы.
.- Один любой символ, кроме новой строки\n.\d- Любая цифра\s- Любой пробельный символ (пробел, табуляция, конец строки и т.п.)\w- Любая буква (то, что может быть частью слова), а также цифры и_[..]- Один из символов в скобках, а также любой символ из диапазонаa-b[^..]- Любой символ, кроме перечисленных
{n}- Ровно n повторений{m,n}- От m до n повторений включительно{m,}- Не менее m повторений{,n}- Не более n повторений?- Ноль или одно вхождение, синоним {0,1}*- Ноль или более, синоним {0,}+- Одно или более, синоним {1,}
Библиотека re в Python предоставляет функции для работы с регулярными выражениями.
re.search(pattern, string) - Найти в строке string первую строчку, подходящую под шаблон pattern;
re.fullmatch(pattern, string) - Проверить, подходит ли строка string под шаблон pattern;
re.split(pattern, string, maxsplit=0) - Аналог str.split(), только разделение происходит по подстрокам, подходящим под шаблон pattern;
re.findall(pattern, string) - Найти в строке string все непересекающиеся шаблоны pattern;
re.finditer(pattern, string) - Итератор по всем непересекающимся шаблонам pattern в строке string (выдаются match-объекты);
re.sub(pattern, repl, string, count=0) - Заменить в строке string все непересекающиеся шаблоны pattern на repl;
Пример поиска по шаблону:
import re
text = "Список чисел: 123, 456, 789 и 123" # строка поиска
pattern = r'\d+' # шаблон
numbers = re.findall(number_pattern, text)
print(numbers)Результат:
['123', '456', '789', '123']
Пример разделения строки по шаблону:
import re
text = "один, два, три; четыре. пять! шесть" # строка поиска
# Разделяем строку по разделителям: точка с запятой, запятая, точка, восклицательный знак, пробельный символ
parts = re.split(r'[;,.!\s]+', text)
print(parts)Результат:
['один', 'два', 'три', 'четыре', 'пять', 'шесть']
Открыть и прочитать файл. Название файла вводится через аргументы командной строки. Воспользовавшись регулярными выражениями, выполнить задание согласно варианту. Вывести на экран результат.
В файле data.txt дан список анкет людей со следующей структурой:
- Фамилия
- Имя
- Пол
- Дата рождения
- Номер телефона
- Город
- Посчитайте количество анкет мужчин в списке.
- Посчитайте количество людей, родившихся в 21 веке.
- Посчитайте количество людей возрастом от 30 до 40 лет.
- Найдите всех людей с фамилией Иванов(а). Выведите их анкеты на экран.
- Найдите всех людей, чьи телефоны имеют код города 927. Выведите их анкеты на экран.
- Найдите всех людей, проживающих в городе Москва. Выведите их анкеты на экран.
- Посчитайте, какое имя встречается чаще всего.
- Найдите все женские имена, начинающиеся с буквы А.
- Пользователь вводит имя человека. Подсчитайте количество людей с таким именем.
- Определите, какой код оператора среди телефонных номеров встречается чаще всего.