gpt4 book ai didi

python - 重新初始化文件中的数字(具有不同数量的列?)

转载 作者:太空宇宙 更新时间:2023-11-03 17:38:12 29 4
gpt4 key购买 nike

我有一个如下所示的文件:

#name   chrom   exonStarts  exonEnds
NM_005101 chr1 948846,949363, 948956,949919,
NM_198576 chr1 955502,957580,970656,976044,976552,976857,977335,978618,978917,979202,979488,979713,980540,980738,981112,981343,981539,981776,982199,982706,982952,983155,983391,984246,984615,984945,985282,985612,985806,986105,986632,986832,987107,989132,989827,990203, 955753,957842,970704,976260,976777,977082,977542,978837,979112,979403,979637,979819,980657,980903,981256,981468,981645,982115,982337,982834,983067,983275,983745,984439,984831,985175,985417,985709,985971,986217,986749,987025,987195,989357,989931,991499,
NM_003327 chr1 1146705,1147083,1147321,1148017,1148371,1149042,1149362, 1147005,1147212,1147518,1148084,1148473,1149165,1149548,

我想要做的是从该值的其余数字中减去第 3 列中的第一个数字。例如,这就是我希望第一行的输出:

NM_005101   chr1    1,110,    517,1073,

我最初决定按 , 拆分文件,但这导致每行的列数不同,这使得它变得困难。我的最终目标是以某种方式找到一种方法,将这些值添加到字典中,以名称为键,将值(exonStart 和 exonEnds)作为范围列表,这样我就可以从第二个文件测试某个值是否为在给定名称和位置的特定范围内。

我的最终词典示例:

posdic = {name:[[start, end], [start, end]], name: etc} 

最好的方法是按 , 分割我的文件,并尝试找出一种方法,即使行的长度不同,也可以从其余列中减去第一个值?

最佳答案

这是一个以您指定的格式处理一行的函数:

def read_exons(line):
parts = iter(line.split())
name = next(parts)
chrom = next(parts)
starts = map(int, next(parts).strip(',').split(','))
ends = map(int, next(parts).strip(',').split(','))
base = starts[0]
return name, [(s-base, e-base) for s, e in zip(starts, ends)]

它返回一个包含名称和开始/结束对列表的元组:

>>> read_exons('NM_005101   chr1    948846,949363,  948956,949919,')
('NM_005101', [(0, 110), (517, 1073)])

您可以按如下方式处理整个文件。请注意,dict 构造函数采用由 read_exons 返回的元组序列,用作键/值对:

>>> with open('input.txt') as f: # use the real filename
... exons = dict(read_exons(line) for line in f
... if not line.strip().startswith('#'))
>>> exons.keys()
['NM_005101', 'NM_198576', 'NM_003327']

关于python - 重新初始化文件中的数字(具有不同数量的列?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30918186/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com