我有一个脚本,其中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']
[]
[]
我不确定如何修复它,任何想法我做错了什么?
答案 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,最好不要将它用作变量名