我不太确定在您的文件中替换 0.5678 的逻辑,因此我使用了一个函数 - 将其更改为您需要的任何内容,或者更详细地解释您想要的内容。排队的最后一个数字?只有浮点数?
尝试:
import os
dirname = "14432826"
lines_distance= 4
def replace_whatever(line):
# Put your logic for replacing here
return line.replace("0.5678", "0")
for filename in filter(lambda x:x.endswith(".pz2") and not x.startswith("m_"), os.listdir(dirname)):
print filename
with open(os.path.join(dirname, filename), "r") as f_in, open(os.path.join(dirname,"m_%s" % filename), "w") as f_out:
replace_tasks = []
for line in f_in:
# search marker in line
if line.strip().startswith("translate"):
print "Found marker in", line,
replace_tasks.append(lines_distance)
# replace if necessary
if len(replace_tasks)>0 and replace_tasks[0] == 0:
del replace_tasks[0]
print "line to change is", line,
line_to_write = replace_whatever(line)
else:
line_to_write = line
# Write to output
f_out.write(line_to_write)
# decrease counters
for i, task in enumerate(replace_tasks):
replace_tasks[i] -= 1
代码中的注释应该有助于理解。主要概念是replace_tasks
记录下一行要修改的时间的列表。
备注:您的代码示例表明您的文件中的数据是结构化的。阅读此结构并对其进行处理肯定会比在纯文本文件上进行搜索和替换方法更节省。