至于对方的回答可以很好地解决这个假设的问题,在它的全部 - 但OP已请求指针或一个例子tpyical分不分开的变换是通常如此成功,我在此提供一些想法和工作代码来展示这一点(基于问题的例子)。
因此,让我们专注于下面的else分支:
from __future__ import print_function
nuc_seq = [] # a list
title_token = '>'
with open('some_file_of_a_kind.txt', 'rt') as f:
for line in f.readlines():
s_line = line.strip() # this strips whitespace
if line.startswith(title_token):
headerline = line.strip("\n")[1:]
else:
nuc_seq.append(s_line) # build list
# now nuc_seq is a list of strings like:
# ['ENLMQVYQQARLSNPELRKSAADRDAAFEKINEARSPLLPQLGLGAD',
# 'YTYSNGYRDANGINSNATSASLQLTQSIFDMSKWRALTLQEKAAGIQ',
# ...
# ]
demo_nuc_str = ''.join(nuc_seq)
# now:
# demo_nuc_str == 'ENLMQVYQQARLSNPELRKSAADRDAAFEKINEARSPLLPQLGLGADYTYSNGYR ...'
也就是说在Python编程的快速和广泛部署模式(和编程功能强大的数据类型一般)。
如果split-unsplit(a.k.a. join)方法仍不清楚,只需询问或尝试对相关问题的优秀答案进行搜索即可。
还要注意,没有必要line.strip('\n')
作为\n
被认为是空白像' '
(字符串只有一个空格)或制表'\t'
,样品:
>>> a = ' \t \n '
>>> '+'.join(a.split())
''
因此,“连接字符”只出现,如果至少有两个元素sto连接,并且在这种情况下,strip将删除所有的空白空间并将空字符串留给我们。
Upate:
的要求,在所谓的问题标题行 “协调部分” 进一步分析:
>1EK9:A.41,52; B.61,74; C.247,257; D.279,289
如果你想检索:
A.41,52; B.61,74; C.247,257; D.279,289
并假设您有(如上面标题字符串中的完整行):
title, coordinate_string = headline.split(':')
# so now title is '1EK9' and
# coordinates == 'A.41,52; B.61,74; C.247,257; D.279,289'
现在分裂在半冒号,修剪的条目:
het_seq = [z.strip()针对z在coordinates.split( ';')] #现在het_seq == ['A .41,52','B.61,74','C.247,257','D.279,289']
如果'a','B','C'和'D'是众所周知的尺寸,那么您可以从输入文件中“丢失”订购信息(因为您可以始终强化您已经知道;-)和可能映射坐标系下的键:(有序坐标对):
>>> coord_map = dict(
(a, tuple(int(k) for k in bc.split(',')))
for a, bc in (abc.split('.') for abc in het_seq))
>>> coord_map
{'A': (41, 52), 'C': (247, 257), 'B': (61, 74), 'D': (279, 289)}
在微程序的上下文:
#! /usr/bin/enc python
from __future__ import print_function
het_seq = ['A.41,52', 'B.61,74', 'C.247,257', 'D.279,289']
coord_map = dict(
(a, tuple(int(k) for k in bc.split(',')))
for a, bc in (abc.split('.') for abc in het_seq))
print(coord_map)
收率:
{'A': (41, 52), 'C': (247, 257), 'B': (61, 74), 'D': (279, 289)}
在这里,人们可能会这样写明确的一个嵌套的循环,但它是一个迟到的欧洲傍晚所以诀窍是从右阅读:
- 为留在het_seq的所有元素
- 分割的点和商店a和right in b
- 比进一步将bc拆分为k的序列,转换为整数并放入元组(有序对的整数坐标)
- 抵达左边你构建一个元组的a尺寸如'A'和从3开始的坐标元组。
在结束通话使用这里的形式字典(key_1,_1,hey_2,_2,...),这也是字典()函数,构造一个字典{key_1:值1,...}
所以所有坐标都是整数,存储有序对作为元组。
I'ld喜欢这里的元组,尽管拆分()生成列表,因为
- 你将把这两个坐标不能扩展或追加那双
- 在Python中的映射和重映射经常进行有可哈希(即不可变类型)准备成为字典中的关键字。
最后一个变体(无knoted内涵):
coord_map = {}
for abc in het_seq:
a, bc = abc.split('.')
coord_map[a] = tuple(int(k) for k in bc.split(','))
print(coord_map)
前四行产生同上次要讨厌“一个衬”(即已经被写上三线放在一起内括号)。
HTH。
请检查我的编辑。更大的信号在blockquote解释中迷失了,但是只有你(我们两个)知道哪个输入是在哪一行上。在你的“过去”代码中,“headerline”的内容是“1EK9:...”,对吧?当迭代行时,我不会使用'nucseq + = line.strip('\ n')',这需要经常完成,因为python中的字符串是不可变的,并且这会创建一些工作;-)也许收集剥离的字符串列表(checp)和后处理,然后加入到最后一个字符串中,比如'''.join(the_sequence)' – Dilettant
谢谢!是的,大号只是第一行。因此,代替nucseq + = line.strip('\ n'),你会使用checp?这是做什么的?非常感谢:) – SammieSam
对不起移动设备和手指:这意味着“便宜”,因为在便宜和快速的操作附加到列表。然后你最后用这个联接调用把一个字符串写回你的变量 - 这个联接所有序列元素的字符串就是这里一个空间的方法--HTH和我看到很多已经很好的答案。 – Dilettant