Оптимальный способ заменить символы в большой строке с Python? - PullRequest
0 голосов
/ 07 августа 2009

Я занимаюсь очисткой относительно больших (30 строк) блоков текста. Вот выдержка:

PID | 1 || 06225401 ^^^ PA0 ^ MR || ПАЦИЕНТОВ ^ FAKE R ||| F

PV1 | 1 | I ||||| 025631 ^ DoctorZ ^^^^^^^ PA0 ^^^^ DRH | DRH |||| ...

ORC | RE || CYT-09-06645 ^ AP |||||| 200912110333 | INTERFACE07

ОБР | 1 || CYT09-06645 | 8104 ^^ L ||| 20090602 ||||||| 200906030000 [Conditio ...

OBX | 1 | TX | 8104 | 1 | ИСТОЧНИК ОБРАЗЕЦ: [источник] |||||| F ||| 200912110333 | CYT ...

В настоящее время у меня есть скрипт, который убирает недопустимые символы или термины. Вот пример.

    infile = open(thisFile,'r')
    m = infile.read()

    #remove junk headers
    m = m.replace("4þPATHþ", "")
    m = m.replace("10þALLþ", "")

Моя цель - изменить этот скрипт, чтобы я мог добавить 4 цифры в конец одного из полей. В частности, поле даты («20090602») в строке OBR. Готовый скрипт сможет работать с любым файлом, который соответствует этому же формату. Возможно ли это с тем, как я сейчас работаю с вводом файла, или мне нужно использовать какую-то другую логику?

Ответы [ 2 ]

2 голосов
/ 07 августа 2009

Вот схема (не проверенная) ... в основном вы делаете это по одной строке за раз

for line in infile:
    data = line.rstrip("\n").split("|")
    kind = data[0]
    # start of changes
    if kind == "OBR":
        data[7] += "0000" # check that 7 is correct!
    # end of changes
    outrecord = "|".join(data)
    outfile.write(outrecord + "\n")

Выше предполагается, что вы выбираете цели фиксации по типу линии (пример: «OBR») и индексу столбца (пример: 7). Если таких целей всего несколько, просто добавьте больше похожих операторов исправления. Если целей много, вы можете указать их так:

fix_targets = {
    "OBR": [7],
    "XYZ": [1, 42],
    }

и код fix_up будет выглядеть так:

if kind in fix_targets:
    for col_index in fix_targets[kind]:
        data[col_index] += "0000"

Вы можете в любом случае добавить код, чтобы проверить, что данные [col_index] действительно являются датой в формате ГГГГММДД перед ее изменением.

Ни один из вышеперечисленных адресов не удаляет нежелательные заголовки, потому что вы не показали пример данных. Я догадываюсь , что применение ваших замен к каждой строке (и избегание написания строки, если после замен она станет только пробелом) сделают свое дело.

2 голосов
/ 07 августа 2009

Вы можете найти ответы здесь полезными.

Повторное нахождение / замена из списка кортежей в Python

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