用Python替换大字符串中字符的最佳方法?

时间:2009-08-07 00:09:05

标签: python

我正在处理清理相对较大(30行)的文本块。这是一段摘录:

  

PID | 1 || 06225401 ^^^ PA0 ^ MR || PATIENT ^ FAKE   R ||| F

     

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

     

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

     

OBR | 1 || CYT09-06645 | 8104 ^^ |||大号20090602 ||||||| 200906030000 [conditio ...

     

OBX | 1 | TX | 8104 | 1 |来源   试样:[源] |||||| |||˚F200912110333 | CYT   ...

我目前有一个脚本可以取出非法字符或条款。这是一个例子。

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

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

我的目标是修改此脚本,以便我可以在其中一个字段的末尾添加4位数字。具体而言,OBR行中的日期字段(“20090602”)。完成的脚本将能够使用遵循相同格式的任何文件。这可能与我当前处理文件输入的方式有关,还是我必须使用一些不同的逻辑?

2 个答案:

答案 0 :(得分:2)

您可以在此处找到有用的答案。

Iterative find/replace from a list of tuples in Python

答案 1 :(得分:2)

这是一个大纲(未经测试)...基本上你一次做一行

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]是否为YYYYMMDD格式的日期。

以上所有地址都不会删除不需要的标头,因为您没有显示示例数据。我猜测将替换应用于每一行(如果在替换后只有空格,则避免编写该行)可以解决这个问题。