Python:根据标头中的正则表达式过滤列和行

时间:2016-02-11 23:45:39

标签: python regex grep

我正在编写一个脚本,可以从与正则表达式匹配的文本文件中grep行和列。我有一个实现,但我希望它更优雅。

这是我的input.tsv:

        a       b       c       d
a       2       9       6       1
b       6       4       7       0
c       3       7       2       0
d       5       8       2       2

我想做这样的事情:

$ grep-row-column.py -E "[a|c]" input.tsv
         a       c
a        2       6
c        3       2

解决方案应该能够流式传输文件(即不将整个内容读入内存)。

这是我的解决方案,有效。

from __future__ import print_function
import sys,re

filename="input.tsv"
regex="[a|c]"

prog=re.compile(".*"+regex+".*")
with open(filename) as tsv:
    #find the appropriate columns in the header that match the regex
    line=tsv.readline()
    header=line.split("\t")
    count=0
    cols=[]
    print(header[0], end='')
    for token in header:
        if prog.match(token):
            #add the column indices to a list for use later
            cols.append(count)
            print("\t",token, end='')
        count+=1
    print()
    #in the rest of the line, find the matching rows and 
    #print the columns that match the indices found above
    while line!="":
        line=tsv.readline()
        if line.strip()=="":
            continue
        tokens=line.split()
        if prog.match(tokens[0]):
            print(tokens[0], end='')
            for col in cols:
                print("\t",tokens[col], end='')
            print()

还有更多' python'这样做的方法?我无法弄清楚如何避免所有for循环和if语句。提前感谢任何建议。

0 个答案:

没有答案