Как безопасно проверить, существует ли файл Фортрана при чтении его с помощью Python?Python

Программы на Python
Ответить
Anonymous
 Как безопасно проверить, существует ли файл Фортрана при чтении его с помощью Python?

Сообщение Anonymous »

Мне нужно прочитать на Python файл, написанный на Фортране. Для этого я использую f2py из numpy. По сути, я пишу файл parse.f90:

Код: Выделить всё

      subroutine read_params(filename, params)
implicit none
! Argument Declarations !
character(len=*), intent(in) :: filename
integer, dimension(4), intent(out) :: params
! Variable Declarations
integer :: i

open (unit=1,status="unknown",file=filename,form="unformatted")
rewind 1
read(1) (params(i), i=1, 4)

end subroutine read_params
Затем я компилирую его с помощью

Код: Выделить всё

python -m numpy.f2py -c -m parse parse.f90
И теперь я могу импортировать его в свой скрипт Python:

Код: Выделить всё

from pathlib import Path
import numpy as np
from .parse import read_params

def do_stuff_with_params(path: Path):
params = read_params(path)
# do something with the parameters
return
Моя проблема заключается в том, что иногда файл Fortran может не существовать, например, потому, что пользователь do_stuff_with_params передал ему неправильный путь. Однако, поскольку путь не является файловым объектом Python, обычный прием с open неприменим. До сих пор я использовал следующий обходной путь:

Код: Выделить всё

def do_stuff_with_params(path: Path):
if not path.exists():
raise FileNotFoundError(f'{path} does not exist ')
params = read_params(path)
# do something with the parameters
return
Но это не идеально по обычным причинам (файл может быть перемещен или удален между проверкой if и моментом его фактического открытия). Кроме того, мне действительно нужно прочитать файл дважды из-за ограничений Фортрана (длинная история...), поэтому мне придется добавить два оператора if. Как я могу это решить? Мне было интересно, могу ли я вызвать исключение в parse.f90 и передать его интерпретатору Python, но я не знаю, как это сделать.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ith-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»