【问题标题】:delete an empty line before matched pattern在匹配模式之前删除一个空行
【发布时间】:2018-07-02 13:26:23
【问题描述】:

我试图在匹配 'find me' 之前写一个新行,但我的代码将一个空行写入输出文件。我怎样才能摆脱那个空行(41.4 克之后的行)?

    with open("input.txt", "r") as infile:
        readcontent = infile.readlines()

    with open("output.txt", "w") as out_file:
        for line in readcontent:
            if line.strip() == 'find me':
                out_file.write('Added New line')
            out_file.write(line)

输入.txt:

[atom]
molecules 
41.4 gram

find me
2.1 kcal
completed

获得 output.txt:

[atom]
molecules 
41.4 gram

Added New line
find me
2.1 kcal
completed

所需的输出.txt:

[atom]
molecules 
41.4 gram
Added New line
find me
2.1 kcal
completed

【问题讨论】:

  • “找到我”之前总是有一个空行,“找到我”后面总是有一个空行吗?您想删除所有空行,还是只删除“找到我”之前的那些(并用不同的文本替换那些)?
  • “找到我”之前只有一个空行。我只想去掉那个空行。
  • 如果那是唯一的空行,不要去寻找“找到我”,然后尝试摆脱之前的空行:相反,只需寻找空行本身。跨度>

标签: python


【解决方案1】:

换句话说,如果下一行是find me,您想跳过输出空行。由于您已经拥有readcontent 中的所有行,您可以简单地查看下一个索引:

with open("input.txt", "r") as infile:
    readcontent = infile.readlines()

with open("output.txt", "w") as out_file:
    for index, line in enumerate(readcontent):
        if not line.strip() and readcontent[index + 1].strip() == 'find me':
            continue
        if line.strip() == 'find me':
            out_file.write('Added New line\n')
        out_file.write(line)

【讨论】:

    【解决方案2】:

    因为你只是在追逐一个空白行。我们输入 .isspace 作为检查,您永远不会写任何空白行或仅包含空白字符的行。

    with open("input.txt", "r") as infile:
        readcontent = infile.readlines()
    
    with open("output.txt", "w") as out_file:
        for line in readcontent:
            if line.strip() == 'find me':
                out_file.write('Added New line')
            if not line.isspace:
                out_file.write(line)
    

    编辑:根据下面的评论者更改

    【讨论】:

    • 你必须调用这个函数,而且line永远不会是None:if not line.isspace():;或if line.strip():
    • 应注意,这将丢弃 所有 行为空或仅包含空格的行,这可能是不可取的。
    • 当我写下“永远不要写任何空白或空白的行”时,我觉得这一点很清楚?
    猜你喜欢
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多