拆分带有前缀的大型.gz文件

2024-05-28 23:55:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我的每个fastq文件大约有2000万次读取(或2000万行)。现在我需要将大的fastq文件分成块,每个块只有100万次读取(或100万行),以便进一步分析。fastq文件就像.txt。在

我的想法是,数一下线,每100万行数完就打印出来。但是输入文件是.gz压缩格式(速成gz),我需要先打开拉链吗?在

如何使用python实现这一点?在

我尝试了以下命令:

zless XXX.fastq.gz |split -l 4000000 prefix

(首先是gzip,然后拆分文件)

然而,似乎它不适用于前缀(我尝试过)“-prefix”,仍然不起作用。同样,使用split命令,输出如下:

^{pr2}$

如果我的前缀是XXX.fastq.gz,那么输出将是XXX.fastq.gzab,这将销毁。速成gz格式。在

所以我需要的是XXX_aa.fastq.gz公司,XXX_ab.fastq.gz公司(即后缀)。我怎么能做到呢?在


Tags: 文件命令txtprefix格式公司fastqxxx
3条回答

...I need to unzip it first.

不,你不知道,至少不是用手。^{}将允许您打开压缩文件,此时您将读取一定数量的字节并将其写入单独的压缩文件中。请参阅底部的“如何读取”和“如何写入”两个压缩文件的示例。在

with gzip.open(infile, 'rb') as inp:
  for <some number of loops>:
    with gzip.open(outslice,'wb') as outp:
      outp.write(inp.read(slicesize))
  else: # only if you're not sure that you got the whole thing
    with gzip.open(outslice,'wb') as outp:
      outp.write(inp.read())

请注意,gzip压缩文件不是随机访问的,因此您需要一次性执行该操作,除非您想先将源文件解压缩到磁盘。在

可以像读取未压缩文件一样读取gzip压缩文件:

>>> import gzip
>>> for line in gzip.open('myfile.txt.gz', 'r'):
...   process(line)

process()函数将处理您提到的特定行计数和条件处理逻辑。在

已发布here

zcat XXX.fastq.gz | split -l 1000000  additional-suffix=".fastq"  filter='gzip > $FILE.gz' - "XXX_"

相关问题 更多 >

    热门问题