2012-05-31 2 views
1

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

@<TRIPOS>MOLECULE 
NAME123 
line3 
line4 
line5 
line6 
@<TRIPOS>MOLECULE 
NAME434543 
line3 
line4 
line5 
@<TRIPOS>MOLECULE 
NAME343566 
line3 
line4 

Я currenly этого код, который работает нормально ...

mols = [] 
with open("test2.mol2", mode="r") as molfile: 
    for line in molfile: 
     if line.startswith("@<TRIPOS>MOLECULE"): 
      mols.append(line) 
     else: 
      mols[-1] += line 
# 
for i in range(len(mols)): 
    out_filename = "file%d.mol2" % i 
    with open(out_filename, mode="w") as out_file: out_file.write(mols[i]); 

но whem я пытался сохранить файлы с именем в соответствии со вторым поле массива, после @MOLECULE (NAME ....) с кодом вроде этого - он не работает. Пожалуйста, помогите мне исправить код. Благодаря!

for i in mols: 
    out_filename = str(i.split()[1]) + ".mol2" % i 
    with open(out_filename, mode="w") as out_file: out_file.write(mols[i]); 

Ошибка

Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
TypeError: not all arguments converted during string formatting 

ответ

1

Я рекомендую использовать более структурированный список:

for line in molfile: 
    if line.startswith("@"): 
     mols.append([]) 
     mols[-1].append(line) # Keep first line 
    else: 
     mols[-1].append(line) 

затем:

for i in mols: 
    out_filename = i[0].strip() + ".mol2" 
    with open(out_filename, mode="w") as out_file: 
     out_file.write(''.join(i)); 
+0

Но этот вывод выводит только первый массив, а не другие. –

+0

И мне также нужно @ MOLECULE как первая строка каждого файла. –

+0

Это должно сделать это. – jpaugh

1

Ваш код включает в себя ".mol2" % i, который выглядит, что он должен быть строка интерполяции, но обеспечивает не заполнители не интерполировать. Предполагая, что вы знаете, как использовать интерполяцию строк со знаком%, возможно, вы имели в виду что-то вроде ".mol%s" % i?

+0

Нет, я новичок в Python. Каждый файл должен быть завершен с помощью .mol2 –

+0

Используйте '+' вместо '%'. – jpaugh

0

Когда вы используете «%», за которым следует имя переменной в Python, он будет искать последовательность форматирования строк в вашей строке и попытаться отформатировать ее. Во втором фрагменте кода Python не находит спецификатор формата в вашей строке.

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