脚本不会使用count迭代多行

时间:2014-02-10 03:11:06

标签: python

我有一个脚本,其中python应该一次占用每一行并做很多事情(对齐和co。)所以我尝试使用count来迭代输入文件中的每一行。

然而,当我运行它时,它只使用输入文件的最后一行并运行其余部分直到结束。所以脚本没问题,但迭代完全没有 对于测试,我只尝试了4行,这是脚本的迭代部分:

for line in open(sys.argv[1]):
     count+=1
     if count < 4 :
         continue
     elif count > 4 :
         break

我尝试编写一个测试脚本,看它是否确实每行运行:

count = 0
file = open('mclOutput2', 'r') 
while True:
    count+=1
    if count < 4:
        print file.readlines()
    elif count > 4 :
        break

这是我得到的输出

['mono|comp78360_c0_seq1\tpoly|comp71317_c0_seq1\tturc|comp70178_c0_seq1\tturc|comp19023_c0_seq1\n', 'mono|comp78395_c0_seq1\trubr|comp23732_c0_seq1\trugi|comp32227_c0_seq1\tsulc|comp11641_c0_seq1\n', 'mono|comp80301_c0_seq1\tnegl|comp30782_c0_seq1\tphar|comp29363_c0_seq1\tpoly|comp53026_c0_seq2\n', 'mono|comp80554_c0_seq1\tnegl|comp27459_c0_seq1\tpoly|comp57863_c0_seq2\trugi|comp11691_c0_seq1\n']
[]
[]

我不确定如何修复它,任何想法我做错了什么?

2 个答案:

答案 0 :(得分:1)

更好的代码:

from itertools import islice

def skip_lines(inf, n):
    list(islice(inf, n))

with open(sys.argv[1]) as inf:
    skip_lines(inf, 4)
    for count,line in enumerate(inf, 4):
        print("do your stuff here")

修改:查看您的数据(在.readlines输出中引用),您需要类似

的内容
GET_LINES = 4
with open(sys.argv[1]) as inf:
    for count,line in zip(range(1, GET_LINES+1), inf):
        data = [pairs.split('|') for pairs in line.strip().split('\t')]
        print("{:>3d}: {}".format(count, data))

给出了

  1: [['mono', 'comp78360_c0_seq1'], ['poly', 'comp71317_c0_seq1'], ['turc', 'comp70178_c0_seq1'], ['turc', 'comp19023_c0_seq1']]
  2: [['mono', 'comp78395_c0_seq1'], ['rubr', 'comp23732_c0_seq1'], ['rugi', 'comp32227_c0_seq1'], ['sulc', 'comp11641_c0_seq1']]
  3: [['mono', 'comp80301_c0_seq1'], ['negl', 'comp30782_c0_seq1'], ['phar', 'comp29363_c0_seq1'], ['poly', 'comp53026_c0_seq2']]
  4: [['mono', 'comp80554_c0_seq1'], ['negl', 'comp27459_c0_seq1'], ['poly', 'comp57863_c0_seq2'], ['rugi', 'comp11691_c0_seq1']]

答案 1 :(得分:0)

使用file.readline代替file.readlines

请注意file是内置的python,最好不要将它用作变量名