python 导入数据后保留某些字段_在python中,从另一个文件中提取行并将唯一的字段保存在单独的文件中...

我正在处理一个非常大的压缩文本文件”值.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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值