качестве другого ответа может быть очень хорошо, чтобы решать предполагаемую проблему в полном комплекте - но ОП запросившие указатели или пример tpyical сплит-неразъемные преобразования, который часто так успешно я предоставляю некоторые идеи и рабочий код, чтобы показать это (на примере вопроса).
Так давайте сосредоточимся на другое отделение ниже:
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) пока неясен, просто спросите или попробуйте исправить SO на отличные ответы на связанные вопросы.
Также обратите внимание, что нет никакой необходимости line.strip('\n')
, как \n
считаются пробельным как ' '
(строка только с пробелом) или табулятор '\t'
, образец:
>>> a = ' \t \n '
>>> '+'.join(a.split())
''
Так что «присоединение символ» появляется только , если есть хотя бы два элемента sto join, и в этом случае 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() для г в coordinates.split (';')] # теперь het_seq == [ 'A .41,52 ',' B.61,74 ',' C.247,257 ',' D.279,289 ']
Если «a», «B», «C» и «D» являются хорошо известными измерениями, вы можете «потерять» информацию о заказе из входного файла (так как вы всегда можете укрепить то, что вы уже знать ;-) и может отображать coordinats как ключ: (упорядоченные координатно-пара):
>>> 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 в b
- , чем дальше разделить bc на последовательность k, преобразовать в целое и положить в кортеж (упорядоченная пара целых координат)
- прибыл слева, вы построили кортеж a (" как «A» и координатный набор из 3.
В конце концов вызвать Dict() функцию, которая строит словарь, используя здесь вид Dict (Key_1, значение_1 hey_2 значение_2, ...), что дает {Key_1: value1, ...}
Так все координаты являются целыми числами, сохраняются упорядоченные пары в виде кортежей.
I'ld предпочитают кортежи здесь, хотя раскол() генерирует списки, потому что
- Вы сохраните эти две координаты не распространяется или добавить эту пару
- В отображении питона и переназначения часто выполняется и там хешируемый (то есть неизменный тип) готов стать ключом в dict.
Один последний вариант (без 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.
Pleasecheck my edit. Большой знак заблудился в интерпретации блока, но только вы знаете (из нас два), какой вход находится на какой строке. В вашем «прошлом» коде содержимое «заголовка» является «1EK9: ...» «правильно? Я бы не использовал 'nucseq + = line.strip ('\ n')' при итерации по строкам, и это нужно делать часто, поскольку строки в python являются imutable, и это создает некоторую работу ;-) возможно, собирает разделенные строки в (checp) и как постпроцессинг, затем присоединитесь к финальной строке, например '. '.join (the_sequence)' – Dilettant
Спасибо! Да, более высокий знак был только первой строкой.Итак, вместо nucseq + = line.strip ('\ n') вы бы использовали checp? Что это делает? Большое спасибо :) – SammieSam
Извините мобильное устройство и пальцы: это означало «дешево», как в дешевой и быстрой операции, добавляющей список. Затем вы в конце напишите строку назад ito свою переменную с этим вызовом соединения - который объединяет все элементы последовательности со строкой, это метод здесь пространства - HTH, и я вижу много ответов, которые уже здорово. – Dilettant