如果当前行对Python中的IF语句有效,如何读取上一行和下一行

时间:2013-12-08 23:25:12

标签: python csv if-statement input

我正在以这种方式阅读gzip压缩文件

import sys;
import gzip;
import csv;

def iscomment(s):            ##function to get rid of the header of the file which every line starts with #
    return s.startswith('#')

with gzip.open(sys.argv[1], 'r') as f:
    for line in dropwhile(iscomment, f):
        for line in csv.reader(f, delimiter="\t"):
            if (int(line[1]) in myHdictionary):
                print PreviousLine,"\n",line,"\n",NextLine,"\n"
            else:
                continue

因此,如果当前行符合IF语句,我想检索文件当前行的上一行和下一行。

任何建议都将受到高度赞赏! 提前谢谢!

1 个答案:

答案 0 :(得分:3)

向后行动时不要试图向前看:

from collections import deque
from itertools import islice, dropwhile
import csv

def iscomment(row): return row[0][0] == '#'

with gzip.open(sys.argv[1], 'r') as f:
    reader = dropwhile(iscomment, csv.reader(f, delimiter="\t"))
    history = deque(islice(reader, 2), maxlen=2)

    for row in reader:      
        if history[-1][1] in myHdictionary:
            print history[0]
            print history[-1]
            print row
        history.append(row)

您需要将csv.reader() 本身包装在dropwhile()迭代器中(具有调整后的条件);否则你会在csv读者永远不会看到的一开始就跳过一行。

deque对象始终包含2个前一行,让您在浏览CSV文件时查看这些行。 history[-1]是前一行,history[0]之前的行。如果history[-1]第1列位于myHdictionary,则您的条件匹配。