1

您好,我需要您对以下问题的帮助。我正在解析看起来像这样的文件

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

我目前有这个工作正常的代码......

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]);

但是当我尝试根据数组的第二个字段(@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
4

3 回答 3

1

您的代码包括".mol2" % i应该是字符串插值的外观,但没有提供要插值的占位符。假设您知道如何使用带有 % 符号的字符串插值,也许您的意思是".mol%s" % i?

于 2012-05-31T03:41:00.277 回答
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));
于 2012-05-31T03:47:41.107 回答
0

当您在 Python 中使用“%”后跟变量名时,它将在您的字符串中查找字符串格式化序列并尝试对其进行格式化。在您的第二个代码片段中,Python 没有在您的字符串中找到格式说明符。

于 2012-05-31T03:45:07.940 回答