您好我需要您的帮助以解决以下问题。 我正在解析看起来像这样的文件
@<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
答案 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没有在字符串中找到格式说明符。