搜索并替换上一行python

时间:2018-04-24 21:19:07

标签: python python-3.x python-2.7

在文件中,我有以下文字:

 xxxxxx
    PCTFREE    10
    INITRANS   8
    MAXTRANS   255
    STORAGE    (
                BUFFER_POOL      DEFAULT
               ),
)

我正在尝试搜索以(")")开头的行并删除","从上一行开始。

3 个答案:

答案 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
       )
)