用Python高效替换大字符串中的字符的方法?

0 投票
2 回答
582 浏览
提问于 2025-04-15 13:26

我正在处理一些相对较大的文本块(大约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^^L|||20090602|||||||200906030000[conditio...

OBX|1|TX|8104|1|SOURCE OF SPECIMEN:[source]||||||F|||200912110333|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 个回答

2

你可能会觉得这里的答案很有帮助。

在Python中从元组列表进行迭代查找/替换

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],
    }

然后修正的代码看起来会像这样:

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

无论如何,你可能想加一些代码来检查数据[col_index]确实是YYYYMMDD格式的日期,才进行修改。

以上内容没有提到如何去掉不需要的标题,因为你没有提供示例数据。我猜想,如果你对每一行应用你的替换(并且在替换后如果只剩下空白就不写入这一行),这样就能解决问题。

撰写回答