用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^^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 个回答
你可能会觉得这里的答案很有帮助。
这里有一个大致的思路(还没测试过)……基本上是逐行处理。
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格式的日期,才进行修改。
以上内容没有提到如何去掉不需要的标题,因为你没有提供示例数据。我猜想,如果你对每一行应用你的替换(并且在替换后如果只剩下空白就不写入这一行),这样就能解决问题。