2013-05-04 102 views
0

我有一个老的shell脚本,其中包括sed命令如下。 源数据($ Tmp)是一个HTML表格。如何将此sed命令转换为Python脚本?

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

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

回答

0

脚本copys从输入文件中的所有行到输出文件,除非它找到含有<table border一条线,则删除所有行,直到找到/table>并继续写所有进一步线。

因此,一种可能是:

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) 
+0

谢谢你......它的工作原理。 – user2020514 2013-09-11 10:09:58

1

这里有一个简单的实现。

简而言之,它打开文件,逐行迭代并将每行打印到输出。如果它匹配"<table border",删除标志设置为True,并且下面的行不打印到输出,直到它匹配"table>"

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   
+1

使用're'在另一个字符串中搜索一个纯字符串有点矫枉过正,一个简单的'in'就足够了。 – mata 2013-05-04 10:52:11

+0

对,更好,谢谢 – Alper 2013-05-04 11:12:15

0
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)