в genfromtxt next (fhd), ошибка StopIteration при добавлении новой строки «с открытым файлом» - PullRequest
0 голосов
/ 27 октября 2018

У меня есть входной файл, который нужно проанализировать (это файл траектории, который содержит 4 кадра), который включает цикл for для каждого кадра и создание временного файла, а затем вычислений.Расчеты вместе с некоторой информацией из входного файла будут записаны в выходной файл.Вот мой код«Solvent» и «Refpts» - это названия списков, которые содержат числа.Содержимое этих списков необходимо в выходном файле.

with open(infile, 'rb') as fi:
    with open(outfile,'a') as fj:
        fj.write('C, O, C-O distance, q, hbond')
        fj.write('\n')
        for frame in range(fr+1):
            fj.write(str(frame))
            fj.write('\n')
            chunk = list(islice(fi, nlines))
            #writes the snapshot's coordinate in a temporary file 'frame.gro'
            with open('frame.gro', 'w') as out:
                for line in chunk:
                    out.write(line)
            with open("frame.gro", 'r') as f:
                o = np.genfromtxt("frame.gro", dtype=None, skip_header=2, usecols=(0,1,3,4,5), max_rows=atoms) #this is line 182
                # obtain info, then do calcs ...
            for n in range(len(solvent)):
                for i in range(len(refpts)):
                    #calcs, add items to lists, etc
                    fj.write(str(refpts[i]))
            # ...rest of the code

Все отлично работало, пока я не добавил каждую строку, включающую "fj".Произошла эта ошибка:

Traceback (последний вызов был последним): файл "script.py", строка 182, в o = np.genfromtxt ("frame.gro", dtype = None, skip_header =2, usecols = (0,1,3,4,5), max_rows = атомов) Файл "/usr/local/lib/python2.7/dist-packages/numpy/lib/npyio.py", строка 1707, вgenfromtxt next (fhd) StopIteration

Что я мог сделать?

РЕДАКТИРОВАТЬ: изменил слово в заголовке. РЕДАКТИРОВАНИЕ # 2: включил фактическую строку с ошибкой

1 Ответ

0 голосов
/ 28 октября 2018

Чтобы расширить мой комментарий

        with open("frame.gro", 'r') as f:
            o = np.genfromtxt("frame.gro", dtype=None, skip_header=2, usecols=(0,1,3,4,5), max_rows=atoms) #this is line 182
            # obtain info, then do calcs ...

Почему вы открываете frame.gro, а не используете открытый файл? Строка genfromtxt использует имя файла, а не f. Я не знаю, является ли это избыточное открытие причиной ошибки, но оно предполагает неаккуратное мышление и / или тестирование.

Я могу получить ошибки StopIteration, если я попытаюсь применить genfromtxt к файлу, содержащему слишком мало строк - слишком мало, чтобы skip. Номер строки ошибки отличается, но это может быть из-за того, что я использую другой код Py3.

Вам необходимо проверить только что написанное frame.gro и убедиться, что оно соответствует вашим предположениям в genfromtxt - размере, содержании и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...