Мне придется много гадать, учитывая тот факт, что вы предоставили очень мало информации, но вот оно.
Итак, учитывая, что ваши текстовые файлы выглядят так:
Имя = Shunzo Roll No-19227 Группа крови-A + имя отца = da sh имя матери = da sh
Name = Foo Roll No-19527 Имя отца группы крови B = da sh имя матери = da sh
Вы запускаете регулярное выражение для всех ваших данных, используя re.findall
, что даст вам список кортежей.
Это регулярное выражение - ^Name=(.+) Roll No-(.+) Blood Group-(.+) father's name=(.+) mother's name=(.+)$
Вот живая демонстрация
Теперь вам нужно l oop просмотреть результаты, имея в виду индексы и то, чему они соответствуют -
- 0-й -> Имя
- 1-й -> Номер броска
- 2-й -> Группа крови
- 3-й - > имя отца
- 4-й -> имя матери
Итак, во время цикла вы должны проверять второй индекс, чтобы получить имя файла и продвигаться по нему соответственно -
import re
# Initiallize the pattern
DATA_PATTERN = re.compile(r"^Name=(.+) Roll No-(.+) Blood Group-(.+) father's name=(.+) mother's name=(.+)$", flags=re.MULTILINE)
# Read the data
with open('test.txt', 'r') as file:
content = file.read()
# Parse the data
results = DATA_PATTERN.findall(content)
# Iterate through the results
for entry in results:
print(entry[2])
# entry[2] is the blood group, this is your file name
# If the file name doesn't exist, create it and put the data in
# If it exists, append the data
Эд it: Просто чтобы вы знали, вы можете делать все, что хотите, в этом l oop, открывая и закрывая каждый файл каждый раз, когда вы l oop не очень хорошая идея, вы можете сначала организовать список в соответствии с entry[2]
но это всего лишь пример, и этот вопрос касается только регулярного выражения и того, как извлечь имя файла.
Альтернативное решение
Если вы знаете каждую группу крови, которая будет присутствовать в ваших данных , вы можете запустить несколько регулярных выражений, соответствующих каждой группе крови. Итак, если вы выполнили это регулярное выражение
^Name=(.+) Roll No-(.+) Blood Group-A\+ father's name=(.+) mother's name=(.+)$
, вы получите список кортежей всех записей, принадлежащих группе крови A +. Теперь вы можете просто записать весь этот список прямо в файл A+.txt
.
Разница между этим решением и исходным решением состоит в том, что это не требует разделения окончательного списка результатов, а вместо этого выполняет несколько регулярных выражений в тот же файл.
Лично я предпочитаю исходное решение, так как разница в производительности между этими двумя не имеет значения, и вам потребуется меньше кода для оригинального