我正在处理清理相对较大(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”)。完成的脚本将能够使用遵循相同格式的任何文件。这可能与我当前处理文件输入的方式有关,还是我必须使用一些不同的逻辑?
答案 0 :(得分:2)
您可以在此处找到有用的答案。
答案 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格式的日期。
以上所有地址都不会删除不需要的标头,因为您没有显示示例数据。我猜测将替换应用于每一行(如果在替换后只有空格,则避免编写该行)可以解决这个问题。