我有一个以</END>
结尾的文件,文件可能在</END>
之后包含空行。我不在乎空白行。但最后一个非空白字是</END>
。我需要在</END>
之前添加几行。我用fileinput
for each_line in fileinput.input("testme",inplace=True):
if each_line.strip() == '</END>':
print "\nAdding ^.*"+source_resource+".*$ \\"
print destination+" [R="+http_code+",L]"
print each_line,
有些专家可以建议如何通过seek
实现这一目标。我相信seek
对于光标定位非常方便。
答案 0 :(得分:1)
您有两种可能的方法,一种使用就地写入,另一种则意味着创建文件的副本。
第二种方法很容易实现:
with open(src_path, "r") as in_f, open(dest_path, "w") as out_f:
for line in in_f:
if line == "</END>":
out_f.write("whatever you want")
out_f.write(line)
out_f.write('\n')
对于第一种方法,我们需要检测结束线并返回其开头:
last = 0
with open(src_path, "r+") as f:
for line in f:
if line == "</END>":
f.seek(last)
f.write("whatever you want"
f.write(line) # rewrite the line
f.write('\n')
last = f.tell() # This will give us the end of the last line
我确实按头编写了这段代码,所以可能会有一些错误,但你明白了。
答案 1 :(得分:0)
我不会用seek
来做,因为你必须自己指定所有的偏移量 - 它会强制你明确地分割线等(取决于操作系统......) - 所有这些往往容易出错。
如果你的语法规定每个-tag在一个单独的行中,你可以使用你拥有的代码(它很简单,可以理解,并且可能很快)。
如果您需要一个不太严格的语法,那么我将使用pyparsing构建一个简单的解析器(假设性能不是主要关注点)。