Извлечь текст, присутствующий между двумя строками в текстовом файле, используя Python - PullRequest
0 голосов
/ 29 января 2020

Допустим, у меня есть текстовый файл со следующим содержанием: (Содержание добавлено после оригинального ответа)

    Quetiapine fumarate Drug substance  This document
    Povidone    Binder  USP
    This line doesn't contain any medicine name.
    This line contains Quetiapine fumarate which shouldn't be extracted as it not present at the 
    beginning of the line.
    Dibasic calcium phosphate dihydrate Diluent USP is not present in the csv
    Lactose monohydrate Diluent USNF
    Magnesium stearate  Lubricant   USNF


    Lactose monohydrate, CI 77491   
    0.6
    Colourant
    E 172

    Some lines to break the group.
    Silicon dioxide colloidal anhydrous
    (0.004
    Gliding agent
    Ph Eur

    Adding some random lines.

    Povidone
    (0.2
    Lubricant
    Ph Eur

У меня есть csv, содержащий список лекарств, который я хочу сопоставить внутри .txt файл и извлеките все данные, которые присутствуют между 2 уникальными лекарствами (когда название лекарства находится в начале строки). (Примеры лекарств из файла csv: 'Quetiapine fumarate', 'Povidone', 'Magnesium stearate', 'Lactose monohydrate' etc etc.)

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

Это должно происходить только в том случае, если название лекарства присутствует в начале новой строки и отсутствует между строкой.

Ожидаемый результат:

['Quetiapine fumarate   Drug substance  This document'],
['Povidone  Binder  USP'],
['Lactose monohydrate   Diluent USNF'],
['Magnesium stearate    Lubricant   USNF'],
[Lactose monohydrate, CI 77491  
    0.6
    Colourant
    E 172],

[Povidone
    (0.2
    Lubricant
    Ph Eur]

Может кто-нибудь помочь мне с этим же сделать это в Python?

Попытка до сих пор:

with open('C:/Users/test1.txt', 'r', encoding='utf8') as file:
data = file.read()

medicines = ('Quetiapine fumarate', 'Povidone', 'Magnesium stearate', 'Lactose monohydrate')

result = []
#with open('C:\Users\substancecopy.csv') as f:
for line in data:
    if any(line.startswith(med) for med in medicines):
        result.append(line.strip())

Мне нужно захватить весь текст из одного лекарства в другое, как показано в ожидаемом результате, чего не происходит с этим фрагментом кода

1 Ответ

0 голосов
/ 29 января 2020

Вы можете сделать это без регулярных выражений, используя str.startswith():

medicines = ('Quetiapine fumarate', 'Povidone', 'Magnesium stearate', 'Lactose monohydrate')

result = []
with open('C:\Users\substancecopy.csv') as f:
    for line in f:
        if any(line.startswith(med) for med in medicines):
            result.append(line.strip())

Я не уверен, почему ваш ожидаемый вывод содержит список списков с одной строкой, но если вы действительно необходимо использовать result.append([line.strip()]).

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