2015-07-29 3 views
1

Я пытаюсь добавить строки в пустой список, читаемый из файла, и я уже лишил строки возвратов и строк новой строки, но что должна быть одна строка вводится как два отдельных элемента в список.Python: список не корректен после добавления строк

DNA = open('DNAGCex.txt') 
DNAID = [] 
DNASEQ = [] 
for line in DNA: 
    line = line.rstrip() 
    line = line.lstrip() 
    if line.startswith('>')==True: 
     DNAID.append(line) 
    if line.startswith('>')==False: 
     DNASEQ.append(line) 
print DNAID 
print DNASEQ 

А вот выход

[ '> Rosalind_6404', '> Rosalind_5959', '> Rosalind_0808'] [ 'CCTGCGGAAGATCGGCACTAGA', 'TCCCACTAATAATTCTGAGG', 'CCATCGGTAGCGCATCCTTAGTCCA', 'ATATCCATTTGTCAGCAGACACGC' , 'CCACCCTCGTGGTATGGCTAGGCATTCAG', 'TGGGAACCTGCGGGCAGTAGGTGGAAT']

Я хочу, чтобы выглядеть следующим образом:

[ '> Rosalind_6404', '> Rosalind_5959', '> Rosalind_0808'] [ 'CCTGCGGAAGATCGGCACTAGATCCCACTAATAATTCTGAGG', 'CCATCGGTAGCGCATCCTTAGTCCAATATCCATTTGTCAGCAGACACGC', 'CCACCCTCGTGGTATGGCTAGGCATTCAGTGGGAACCTGCGGGCAGTAGGTGGAAT']

Вот исходный материал, просто удалите '' s:

[ '>' Rosalind_6404 CCTGCGGAAGATCGGCACTAGA TCCCACTAATAATTCTGAGG '> Rosalind_5959' CCATCGGTAGCGCATCCTTAGTCCA ATATCCATTTGT CAGCAGACACGC «>» Rosalind_0808 CCACCCTCGTGGTATGGCTAGGCATTCAG TGGGAACCTGCGGGCAGTAGGTGGAAT]

+0

Добро пожаловать на SO. Пожалуйста, сократите свой пример, если не будет причин, по которым нам нужно делать длинные строки ДНК-выглядящих вещей ... и попытаться быть более ясными, что вы ищете; как показано, вывод и желаемый выход идентичны, насколько я могу видеть. Я не знаю, что это проблема вырезания/вставки или проблема форматирования. – Foon

+0

Пожалуйста, очистите исходный материал, который вы разместили, в удобном для копирования вставке текстовом блобе; вы не должны заставлять других делать это за вас. –

+0

@Foon - Желаемый 'list' имеет некоторые элементы, объединенные в более длинные строки (согласен, что это непросто заметить). – TigerhawkT3

ответ

1

Вы можете комбинировать .lstrip() и .rstrip() в один .strip() вызова.

Тогда вы думали, что .append() добавили строки в список и объединили строки в одну строку. Здесь мы начинаем DNASEQ с пустой строкой и использовать +=, чтобы присоединиться к линии в длинную строку:

DNA = open('DNAGCex.txt') 
DNAID = [] 
DNASEQ = [] 
for line in DNA: 
    line = line.strip() 
    if line.startswith('>'): 
     DNAID.append(line) 
     DNASEQ.append('') 
    else: 
     DNASEQ[-1] += line 
print DNAID 
print DNASEQ 
+0

Ваша реализация работает, но я относительно неопытна. Не могли бы вы объяснить функциональность: DNASEQ [-1] + = строка? – larosamatt

+0

Доступ к последнему элементу 'DNASEQ' - который является строкой - и объединяет текущее содержимое' line' на нем. – TigerhawkT3

+0

@ TigerhawkT3 замечательные мысли думают одинаково ;-) –

1

В каждой итерации цикла, вы только глядя на определенную строку из файла. Это означает, что, хотя вы, безусловно, добавляете строки, которые не содержат перевода строки в конце, вы по-прежнему добавляете одну из строк файла за раз. Вы должны позволить интерпретатору знать, что вы хотите объединить определенные строки, делая что-то вроде установки флага, когда вы впервые начинаете читать в DNASEQ и очищаете его, когда запускается следующий DNAID.

for line in DNA: 
    line = line.strip() # gets both sides 
    if line.startswith('>'): 
     starting = True 
     DNAID.append(line) 
    elif starting: 
     starting = False 
     DNASEQ.append(line) 
    else: 
     DNASEQ[-1] += line 
+0

Всегда бей меня к удару ... – FirebladeDan

Смежные вопросы