Как удалить дублированный блок текста с помощью Python - PullRequest
0 голосов
/ 25 октября 2018

Я работаю с текстовыми файлами, которые являются радиологическими отчетами.Если документ состоит из двух страниц, существует блок текста, содержащий имя пациента и другие метаданные, которые повторяются в верхней части всех страниц, а остальная часть страницы содержит содержимое отчета.Я объединил страницы в один текстовый объект.Сохраняя первый блок, я хочу удалить все остальные повторяющиеся блоки.Есть ли способ удалить эти блоки программно из всех таких файлов?Повторяющиеся блоки выглядят примерно так:

 Patient ID            xxx                 Patient Name           xxx
 Gender                 Female                         Age                     43Y 8M
 Procedure Name         CT Scan - Brain (Repeat)       Performed Date          14-03-2018
 Study DateTime         14-03-2018 07:10 am            Study Description       BRAIN REPEAT
 Study Type             CT                             Referring Physician     xxx

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

При условии, что вы можете поместить каждую отдельную страницу в список для документа

def remove_patient_data(documents: list, pattern: str) -> str:
    document_buffer = ""
    for count, document in enumerate(documents):
        if count != 0:
            document = document.replace(pattern, "")
        document_buffer += document + '\n'
    return document_buffer

my_documents = ["blah foo blah", "blah foo bar", "blah foo baz"]
remove_patient_data(my_documents, "foo")

, который будет возвращать

'blah foo blah\nblah bar\nblah baz\n'

0 голосов
/ 25 октября 2018

Вы можете найти начальные индексы всех вхождений данных пациента, выполнив:

str.find(sub,start,end)

где

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

, она вернетНИЗКИЙ индекс вхождения искомой строки (данные пациента).

Вы можете выполнить этот процесс в цикле, чтобы получить все индексы, в которых находятся данные пациента.

Затем вы можете заменитьданные пациента со второго экземпляра, выполнив что-то вроде:

str_new = ''.join(( str_old[ : indicies[1] ], '' , s_old[ indicies[2] + len(str_old) + 1 : ] ))
  ... assuming a total of 3 pages in your record.

Другой вариант:

str.replace(old, new [, max])

где

old: - Это старая подстрока длязаменить - в вашем случае данные пациента
новые: - это новая подстрока, которая заменит старую подстроку - это может быть '' (пробел) max: - если это необязательнозадан максимальный аргумент, заменяются только первые вхождения числа - это будет означать, что данные пациента теперь будут отображаться только на странице last .

0 голосов
/ 25 октября 2018

Открытый текстовый файл может быть представлен как последовательность в Python.Рассмотрим plain.txt ниже:

This is the first line!\n
This is the second line!\n
This is the third line!\n

Вы можете использовать зарезервированное слово with для создания контекста, управляющего логикой открытия / закрытия, например:

with open("./plain.txt", "r") as file:
    for line in file:
        # program logic
        pass

"r"относится к режиму, который использует open.

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

Редактировать:Я видел ваши изменения, и похоже, что это действительно CSV, верно?Если так, я рекомендую пакет панд.

import pandas as pd # Conventional namespace is pd

# Check out blob, os.walk, os.path for programmatic ways to generate this array
files = ["file.csv", "names.csv", "here.csv"] 

df = pd.DataFrame()
for filepath in files:
    df = df.append(pd.read_csv(filepath))

# To display result
print(df)

# To save to new csv
df.to_csv("big.csv")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...