在文件中,我有以下文字:
xxxxxx
PCTFREE 10
INITRANS 8
MAXTRANS 255
STORAGE (
BUFFER_POOL DEFAULT
),
)
我正在尝试搜索以(")")开头的行并删除","从上一行开始。
答案 0 :(得分:1)
with open('filename') as f:
print(f.read().replace(',\n)','\n)')
答案 1 :(得分:1)
您在说明中要求的内容与您的示例输入中的任何内容都不匹配,甚至不接近它。您的所有行都不以)
开头。你的一行以一些空格和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')
你可以使用像itertools
recipes中那样的pairwise
迭代器包装器来使它更清洁,更紧凑,但稍微修改一下以包含" extra"最后一对:
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')
答案 2 :(得分:0)
您可以逐行循环显示文本,并检查)
前面的一个索引:
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
)
)