for循环后,在gzip压缩的文本文件上进行迭代停止

时间:2018-11-28 19:29:52

标签: python fastq

我正在尝试遍历g压缩的文本文件。格式是数据以四行为块。我需要采取这些块的百分比并将其复制到另一个文件。我的代码接受每个块,然后确定是否应该使用random.random()复制它。我的问题是,在选择了第一个块之后,代码停止了,并停止了对g-zip文件的迭代。有人知道我可能在做什么错吗?

谢谢! 克里斯

链接到文件:Download

operator+

1 个答案:

答案 0 :(得分:0)

聚集四个一组并决定是否保存之后;重置计数器和缓冲区。

for line in input_f:
    buffer.append(line)
    counter += 1
    if counter == 4:
        if random.random() < per_reads:
            for x in buffer:
                output_list.append(x)
        buffer = []
        counter = 0

重构为使用enumeratelist.extend

for line_no, line in enumerate(input_f, 1):
    buffer.append(line)
    if line_no % 4 == 0:
        if random.random() < per_reads:
            output_list.extend(buffer)
        buffer = []

此测试有效,...

output_list = []
buffer = []
input_f = list('abcdefghejklmnopqrstuvwxyz')
for line_no, line in enumerate(input_f, 1):
    buffer.append(line)
    print(line_no)
    if line_no % 4 == 0:
##        if random.random() < per_reads:
        if random.choice((0,1,2,3)) < 2:
            print(buffer)
            output_list.extend(buffer)
        buffer = []

结果:

>>>
1
2
3
4
5
6
7
8
9
10
11
12
['e', 'j', 'k', 'l']
13
14
15
16
17
18
19
20
['q', 'r', 's', 't']
21
22
23
24
25
26
>>> output_list
['e', 'j', 'k', 'l', 'q', 'r', 's', 't']
>>> 

也许您的条件不起作用