Python неправильно записывает список в файл - PullRequest
0 голосов
/ 21 мая 2011

У меня проблема с записью списка в файл.Я аннотирую определенные файлы, чтобы изменить их в определенный формат, поэтому я читаю файлы выравнивания последовательности, сохраняю их в списках, выполняю необходимое форматирование, а затем записываю их в новый файл.Проблема в том, что, хотя мой список, содержащий выравнивания последовательностей, структурирован правильно, выходные данные, полученные при записи их в новые файлы, являются неправильными (он не повторяет структуру моего списка).Я включаю только часть моего вывода и как он должен выглядеть, потому что сам список слишком длинный, чтобы публиковать.

ВЫХОД, ПИСАННЫЙ НА ФАЙЛ:

>
TRFE_CHICK 

From XALIGN

MKLILCTVLSLGIAAVCFAAP (seq spans multiple lines) ...

ADYIKAVSNLRKCS--TSRLLEAC*> (end of sequence, * should be on a newline, followed by > on a newline as well)

ВЫХОД, ПИСЬМО ПОДПИСАН НА КАК:

>

TRFE_CHICK

From XALIGN

MKLILCTVLSLGIAAVCFAAP (seq spans many lines) ...

ADYIKAVSNLRKCS--TSRLLEAC

*

>

Это делает это неверное форматирование несколько раз.Я пробовал мариновать и разбирать список, но это еще больше его не форматирует.

Мой код для создания списка и записи в файл:

new = []
for line in alignment1:
    if line.endswith('*\n'):
        new.append(line.strip('*\n'))
        new.append('*')
   else:
        new.append(line)

new1 = []
for line in new:
    if line.startswith('>'):
        twolines = line[0] + '\n' + line[1:]
        new1.append(twolines)
        continue
    else:
        new1.append(line)

for line in new1:
     alignfile_annot.write(line)

По сути, я кодировал его так, чтобы он читал файл выравнивания, вставлял строку между концом последовательности исимвол * и также>, за которым следует код ID, всегда в новых строках.Это способ построения моего списка, а не его запись в файл.Кто-нибудь знает, почему неформат?Извиняюсь за длинный текст, я старался сделать его как можно более коротким, чтобы прояснить мою проблему: я использую Python 2.6.5

1 Ответ

3 голосов
/ 21 мая 2011
new.append(line.strip('*\n'))
new.append('*')

У вас есть список строк (с разделителями новой строки каждая), поэтому вам нужно включить \ n и для этих двух строк:

new.append(line[:-2] + "\n")  # slice as you just checked line.endswith("*\n")
new.append("*\n")

Запомните полосу (или фрагмент, какЯ изменил его на) удалит новую строку, поэтому разделение одного элемента в списке со значением "... * \ n" на два элемента "..." и "*" на самом деле удаляет перевод строки с того, что было у вас изначально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...