在 for 循环后停止迭代 gzip 文本文件
Iterating over a gzipped text file stops after for loop
我正在尝试遍历 g 压缩文本文件。格式是数据以四行为单位。我需要从这些块中提取一定比例并将它们复制到另一个文件中。我的代码接受每个块,然后确定是否应该使用 random.random() 复制它。我的问题是代码在选择第一个块并停止迭代 g-zip 文件后停止。有人知道我可能做错了什么吗?
谢谢!
克里斯
Link 到文件:Download
#Calc percentage of reads that should be sampled
per_reads = sub_reads_num/input_reads
#Read gzipped file and save selected lines to mem
output_list = []
input_f = gzip.open(input_path, 'rb')
counter = 0
buffer = []
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)
else:
buffer = []
counter = 0
input_f.close()
当你四人一组,决定是否保存后;重置你的计数器和缓冲区。
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
重构以利用 enumerate and list.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']
>>>
可能你的条件不成立
我正在尝试遍历 g 压缩文本文件。格式是数据以四行为单位。我需要从这些块中提取一定比例并将它们复制到另一个文件中。我的代码接受每个块,然后确定是否应该使用 random.random() 复制它。我的问题是代码在选择第一个块并停止迭代 g-zip 文件后停止。有人知道我可能做错了什么吗?
谢谢! 克里斯
Link 到文件:Download
#Calc percentage of reads that should be sampled
per_reads = sub_reads_num/input_reads
#Read gzipped file and save selected lines to mem
output_list = []
input_f = gzip.open(input_path, 'rb')
counter = 0
buffer = []
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)
else:
buffer = []
counter = 0
input_f.close()
当你四人一组,决定是否保存后;重置你的计数器和缓冲区。
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
重构以利用 enumerate and list.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']
>>>
可能你的条件不成立