【问题标题】:How to convert this sed command to Python script?如何将此 sed 命令转换为 Python 脚本?
【发布时间】:2013-05-06 01:40:21
【问题描述】:

我有一个旧的 shell 脚本,其中包括 sed 命令,如下所示。 源数据($Tmp) 是一个 HTML 表格。

sed '/<table border/,/table>/d' $Tmp > $Out

有人可以帮我将此命令转换为 Python 脚本吗? 我真的不知道如何用正则表达式做到这一点。 非常感谢..

【问题讨论】:

    标签: python regex sed


    【解决方案1】:

    这是一个简单的实现。

    简而言之,它打开文件,逐行迭代并将每一行打印到输出。如果它与"&lt;table border" 匹配,则删除标志设置为True,并且在匹配"table&gt;" 之前,不会将以下行打印到输出中。

    import sys
    
    f = open(sys.argv[1])
    delete = False
    for line in f:
        if delete == False:
            if "<table border" in line:
                delete = True
    
        if delete == False:
            print line,
    
        if delete == True:
            if "table>" in line:
                delete = False        
    

    【讨论】:

    • 使用re 在另一个字符串中搜索纯字符串有点过头了,一个简单的in 就足够了。
    【解决方案2】:

    脚本将所有行从输入文件复制到输出文件,除非它找到包含&lt;table border 的行,然后它会删除所有行,直到找到/table&gt; 并继续写入所有其他行。

    所以一种可能性是:

    with open('in') as inf, open('out', 'w') as outf:
        while True:
            line = inf.readline()
            if '<table border' in line:
                while True:
                    line = inf.readline()
                    if not line or '/table>' in line:
                        line = inf.readline()
                        break
            if not line:
                break
            outf.write(line)
    

    【讨论】:

      【解决方案3】:
      import sys
      with open(sys.argv[1]) as f:
          for line in f:
              if '<table border' in line:
                  for line in f:
                      if 'table>' in line:
                          break
              else:
                  sys.stdout.write(line)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-26
        • 1970-01-01
        • 1970-01-01
        • 2011-05-01
        • 2021-07-25
        • 2017-09-06
        • 1970-01-01
        • 2018-11-09
        相关资源
        最近更新 更多