从python数组获取文件的名称

时间:2012-05-31 03:35:51

标签: python arrays

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

@<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

3 个答案:

答案 0 :(得分:1)

您的代码包含".mol2" % i,它看起来应该是字符串插值,但不提供插值的占位符。假设您知道如何使用%符号进行字符串插值,或许您的意思是".mol%s" % i

答案 1 :(得分: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));

答案 2 :(得分:0)

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