[英]Search and replace previous line python
在文件中,我有以下文本:
xxxxxx
PCTFREE 10
INITRANS 8
MAXTRANS 255
STORAGE (
BUFFER_POOL DEFAULT
),
)
我正在尝试搜索开头为(“)”)的行,并从上一行中删除“,”。
with open('filename') as f:
print(f.read().replace(',\n)','\n)')
您在描述中要求的内容与示例输入中的任何内容都不匹配,甚至接近。 您的所有行都不以)
开头。 您的一行以空白和a开头,但之前的行是空白行,而该行之前的最后一个非空白行没有逗号可删除。
但是,我将忽略样本输入,并在说明中解释您要如何做。
最简单的方法是在迭代各行时只跟踪上一行:
lastline = None
for line in infile:
line = line.rstrip()
if line.startswith(")"):
if lastline is not None:
lastline = lastline.rstrip(",")
if lastline is not None:
outfile.write(lastline + '\n')
lastline = line
if lastline is not None:
outfile.write(lastline + '\n')
您可以通过使用pairwise
迭代器包装器(如itertools
配方中的包装器)来使其更简洁,更紧凑,但稍作修改以在末尾包含“额外”对:
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = itertools.tee(iterable)
next(b, None)
return itertools.zip_longest(a, b, fillvalue='')
stripped = (line.rstrip() for line in infile)
for line, nextline in pairwise(stripped):
if nextline.startswith(")"):
line = line.rstrip(",")
if line is not None:
outfile.write(line + '\n')
您可以逐行遍历文本,然后检查一个索引前面的)
:
new_s = [i.strip('\n') for i in open('filename.txt')]
final_data = '\n'.join(new_s[i][:-1] if new_s[i+1].startswith(')') else new_s[i] for i in range(len(new_s)-1))
输出:
xxxxxx
PCTFREE 10
INITRANS 8
MAXTRANS 255
STORAGE (
BUFFER_POOL DEFAULT
)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.