разделение с использованием регулярных выражений с обработкой файлов и созданием файлов - PullRequest
0 голосов
/ 27 мая 2020

У меня есть текстовый файл, содержащий номера списков тысяч студентов, и с их номерами списков в нем есть категория имени учащегося, класс, номер телефона, имя отца, имя матери, адрес, группа крови, а также несколько полей и

Мне нужно разделить их, используя группы крови в отдельных файлах, например, группа крови A + должна быть в одном A + .txt и аналогично, для других групп крови я должен их разделить

Я использую регулярное выражение, которое нужно получить, но не знаю, как получить имя файла напрямую и передать его в этот файл

1 Ответ

0 голосов
/ 27 мая 2020

Мне придется много гадать, учитывая тот факт, что вы предоставили очень мало информации, но вот оно.

Итак, учитывая, что ваши текстовые файлы выглядят так:

Имя = 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.

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

Лично я предпочитаю исходное решение, так как разница в производительности между этими двумя не имеет значения, и вам потребуется меньше кода для оригинального

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...