【问题标题】:Removing complete lines of text in a text file (on Python)删除文本文件中的完整文本行(在 Python 上)
【发布时间】:2018-07-03 13:55:20
【问题描述】:

我正在处理一个包含 12000 行代码的输出日志文件,其中大部分包含如下所示的内容:

"760.0132   EXP     window1: blendMode = 'avg'" 

我的目标是完全删除任何具有“EXP window1: blendMode = 'avg'”的行。我可以从找到它的所有行中删除该文本位,但不能从数字中删除。这是我用来删除文本位的代码(借自另一个堆栈溢出问题/答案):

infile = "01_Day1_run1.txt"
outfile = "01_Day1_run1_cleaned.txt"

delete_list = ["    EXP     window1: blendMode = 'avg'"]

fin = open(infile)
fout = open(outfile, "w+")
for line in fin:
for word in delete_list:
    line = line.replace(word, "")
fout.write(line)

fin.close()
fout.close()

我希望我能添加类似的东西

delete_list = ["1**.****    EXP     window1: blendMode = 'avg'"]

为了删除包含所有文本的任何数字,以及该行中的任何数字,但它似乎不起作用。任何关于如何最好地清理日志文件的建议将不胜感激。

非常感谢, 西蒙

【问题讨论】:

  • 您是要实际删除该行还是仅将匹配的行替换为空行?
  • 你的缩进似乎也关闭了 - 你的 for word in delete_list 循环是否应该缩进一个?

标签: python file text


【解决方案1】:

您为什么要使用 Python 来执行此操作?您可以使用简单的grep -vfindstr /V 来执行此操作,如下例所示:

Prompt>grep -v "blendmode" input.txt >output.txt

【讨论】:

    【解决方案2】:
    infile = "01_Day1_run1.txt"
    outfile = "01_Day1_run1_cleaned.txt"
    
    delete_list = ["    EXP     window1: blendMode = 'avg'"]
    
    fin = open(infile)
    fout = open(outfile, "a")
    for line in fin:
        for word in delete_list:
            if word in line:
                wordCheck = False
                break
            else:
                wordCheck = True
        if wordCheck:
            fout.write(line)
    
    fin.close()
    fout.close()
    

    也许更干净:

    with open("01_Day1_run1.txt", "r") as infile, open("01_Day1_run1_cleaned.txt", "a") as outfile:
        for line in infile:
            if not any(filter in line for filter in delete_list ):
                outfile.write(line)
    

    【讨论】:

      【解决方案3】:
      infile = "01_Day1_run1.txt"
      outfile = "01_Day1_run1_cleaned.txt"
      
      delete_string = "EXP     window1: blendMode = 'avg'"
      
      fin = open(infile)
      fout = open(outfile, "a")
      for line in fin.readLines():
          if delete_list not in line:
              fout.write(line)
      
      fin.close()
      fout.close()
      

      【讨论】:

        猜你喜欢
        • 2023-01-03
        • 2023-02-08
        • 2018-09-21
        • 1970-01-01
        • 1970-01-01
        • 2017-09-24
        • 2015-10-27
        • 2021-09-08
        • 1970-01-01
        相关资源
        最近更新 更多