1. ホーム
  2. python

[解決済み】Python: ValueErrorです。反復処理と読み込みメソッドを混在させるとデータが失われる

2022-02-11 02:25:59

質問

以下のスクリプトを実行すると、次のようなメッセージが表示されます。

ValueErrorです。反復と読み込みメソッドを混在させるとデータが失われる

numが最初のforループの中にあり、last_hostがnumに依存しているためだと理解していますが、これを回避する方法がわかりません。

#!/usr/bin/env python2
import datetime as dt
import glob as glob
import os as os
import shutil as shutil
import signal as signal
import subprocess as sp
import sys as sys

# Open PDB file and read coordinates
pdb_file = open('align_z.pdb', 'r')
new_pdb_file = open('vac.pdb', 'w')



#Get last host atom
for num, line in enumerate(pdb_file, 1):
    if "L01" in line:
       print num
       break 


last_host=int(num)
print(last_host-1)

for atom in range(0, last_host-1):
    data = pdb_file.readline()
    new_pdb_file.write(data) 

解決方法は?

一度、繰り返し pdf_file によって enumerate を呼び出さない限り、再び反復することはできません。 pdb_file.seek(0) seek(0) はストリームの位置を先頭に変更します。

以下は私の修正点です。

num = 1
for line in pdb_file:
    num += 1
    if "L01" in line:
       print num
       break 

pdb_file.seek(0)  # go back to the beginning and then it can be iterated again

last_host=int(num)
print(last_host-1)

for atom in range(0, last_host-1):
    data = pdb_file.readline()
    new_pdb_file.write(data)