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

标签 python

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

#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/

相关文章:

python - 如何在 Python 中为部分正则表达式设置 ignorecase 标志?

python - 从 grid_2d_graph 中一致删除节点

python - Pip 不使用垫片,而是使用 pyenv 的系统 'pip'

python - 狮身人面像 : Remove package and module name for specific function

python - PEP 8,为什么在关键字参数或默认参数值中 '=' 周围没有空格?

python - 通过Applescript在Python中打开pwdir文件夹中的文件

python - 使用 Bokeh 将图例定位在绘图区域之外

python - tastypie - 在哪里限制可能由 PATCH 更新的字段?

python - 解释这个高阶函数行为

python - 使用 tmpfs 改进 openCV VideoWriter