【问题标题】:Copy Lines Between Two Strings To Another File [duplicate]将两个字符串之间的行复制到另一个文件
【发布时间】:2019-03-20 15:50:07
【问题描述】:

我正在尝试打开一个文本文件并将行从“FIRST TEXT”复制到“LAST TEXT HERE”,然后将其写入另一个文本文件。我不知道如何去完成这个。

with open('SumBillRpt2019-2-27 Cyl 20.txt') as original_file, 
open('test.txt', 'w') as new_file:
    for line in original_file:
        if line.strip() == 'FIRST TEXT HERE' in line.strip():
            new_file.write(original_file.read())
        if line.strip() == 'LAST TEXT HERE':
            new_file.write(original_file.read())

【问题讨论】:

  • 像你已经做的那样遍历original_file中的行。测试起始行,找到时将布尔变量设置为 true。如果此布尔变量为真,则将循环的每一行写入输出文件,在执行之前检查结束行。当遇到结束行时,将布尔变量设置为 false。

标签: python


【解决方案1】:

创建一个 true/false 变量来跟踪是否应将当前行写入新文件,并将其初始化为 false。

当您从原始文件中读取每一行时,如果它与 FIRST TEXT 匹配,则将标志设置为 true,否则,如果它与 LAST TEXT 匹配,则将标志设置为 false。

然后,如果标志为真,则将该行写入新文件。

writing = False
with open('original.txt', 'r') as original, open('new.txt', 'w') as new:
    for line in original:
        if line.strip() == 'FIRST TEXT HERE':
            writing = True
        elif line.strip() == 'LAST TEXT HERE':
            writing = False
            # if you know this text will only occur once, you
            # could just break out of the loop here

        if writing:
            new.write(line)

【讨论】:

  • 太棒了!这行得通!我永远不会知道 True 和 False 的技巧,然后在“ELIF”之后使用“IF”语句
【解决方案2】:

使用sed:

$ sed -n -e "/FIRST TEXT/,/LAST TEXT HERE/p" < input.txt > output.txt

【讨论】:

    【解决方案3】:

    如果我理解正确,您想浏览原始文件,如果找到起始字符串,则开始复制到文件 b,并在到达终止字符串后停止这样做。我会用一个标志来表示你在这两个字符串之间:

    with open('SumBillRpt2019-2-27 Cyl 20.txt') as original_file,
    open('test.txt', 'w') as new_file:
        flag = false
        for line in original_file:
            if line.strip() == 'FIRST TEXT HERE' in line.strip():
                flag = true
            if flag:
                new_file.write(original_file.read())
            if line.strip() == 'LAST TEXT HERE':
                break
    

    注意:我没有测试代码。

    【讨论】:

      猜你喜欢
      • 2021-08-28
      • 2023-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 2013-03-04
      • 2013-06-25
      相关资源
      最近更新 更多