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

しかし、配列の2番目のフィールド、@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で「%」の後に変数名を使用すると、文字列内の文字列フォーマットシーケンスが検索され、フォーマットが試行されます。2番目のコードスニペットでは、Pythonは文字列内の形式指定子を検出していません。

于 2012-05-31T03:45:07.940 に答える