我正在处理一个非常大的压缩文本文件”值.gz,在第2列中包含每个基因的多个值,在第4列中包含另一个包含唯一基因列表的小文本文件(“床.txt"). 我试图从值.gz文件(不用全部阅读,只使用字典床.txt)中列出的基因子集床.txt文件,并将其保存在每个基因的单独文件中。我无法在bash中执行此操作,因为文件太大而无法解压缩,所以我正在python中尝试,但我是一个新手,而且我被卡住了:我已经提取了匹配的基因并将它们保存在一个文件中,但是如何将每个基因保存到不同的文件中?在
例如床.txt文件如下所示:chr start end gene_id
1 11868 11869 ENSG00000223972
1 29552 29553 ENSG00000227232
1 29806 29807 ENSG00000243485
在值.gz文件如下所示:
^{pr2}$
我想要的输出是:
ENSG0000223972.gzrs1 ENSG00000223972 0.09 0.8 0.5
rs2 ENSG00000223972 0.09 0.8 0.3
ENSG00000227232.gzrs1 ENSG00000227232 -0.06 -0.5 0.6
rs3 ENSG00000227232 0.09 0.8 0.3
(所有基因值.gz床上应该有一个匹配的值(但不是100%确定!),但床文件中会列出更多与值.gz文件)#! /usr/bin/env python
import gzip
lookup = dict()
my_file = open("bed.txt","r")
for line in my_file.readlines():
row = line.split()
lookup[row[3]] = row[1:]
# print lookup
my_file.close()
with open('MyOutFile', 'w') as outfile:
with gzip.open("values.gz", "r") as eqtl:
for line in eqtl.readlines():
for key in lookup:
if line.find(key) > -1:
outfile.write(line)
根据Paisanco的建议:with gzip.open("values.gz", "r") as eqtl:
for line in eqtl.readlines():
row = line.split()
gene = row[1]
filename = gene+'.txt'
if gene in lookup:
# assign unique file name here, then
if os.path.exists(filename):
append_write = 'a'
else:
append_write = 'w'
with open(filename,append_write) as outfile:
outfile.write(line)