Python:从url读取fortran文件

2024-09-30 04:26:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Python3中执行以下操作:读取Fortran文件,但要从URL而不是本地文件读取。原因是,对于我的具体示例,有很多文件,我希望避免先下载所有文件

我设法做到了

a)从URL读入简单的.txt文件

import urllib
from urllib.request import urlopen
url='http://www.deus-consortium.org/deus-library/filelist/deus_file_list_501.txt'
data=urllib.request.urlopen(url)
i=0
for line in data: # files are iterable
    print(i,line)
    i+=1
#alternative: data.read()

b)读入本地Fortran文件(二进制little endian非匹配Fortran文件),如下所示:

该文件来自:http://www.deus-consortium.org/deus-library/efiler1/Babel_le/boxlen648_n2048_lcdmw7/post/fof/output_00090/fof_boxlen648_n2048_lcdmw7_masst_00000

from scipy.io import FortranFile
filename='../../Downloads/fof_boxlen648_n2048_rpcdmw7_masst_00000'
ff = FortranFile(filename, 'r')
nhalos=ff.read_ints(dtype=np.int32)[0]
print('number of halos in file',nhalos)

有没有办法避免直接从URL下载和读取Fortran文件?我试过了

import urllib
from urllib.request import urlopen
url='http://www.deus-consortium.org/deus-library/efiler1/Babel_le/boxlen648_n2048_lcdmw7/cube_00090/fof_boxlen648_n2048_lcdmw7_cube_00000'
pathname = urllib.request.urlopen(url)  
ff = FortranFile(pathname, 'r')
ff.read_ints()

给出“操作错误:获取文件位置失败”pathname.read()也不起作用,因为它是fortran文件

有什么想法吗?提前谢谢


Tags: 文件importurlreadrequesturlliburlopenff
1条回答
网友
1楼 · 发布于 2024-09-30 04:26:30

也许您可以使用^{}模块下载和读取数据

例如:

import urllib
import tempfile
from scipy.io import FortranFile
from urllib.request import urlopen

url='http://www.deus-consortium.org/deus-library/efiler1/Babel_le/boxlen648_n2048_lcdmw7/cube_00090/fof_boxlen648_n2048_lcdmw7_cube_00000'

with tempfile.TemporaryFile() as fp:
    fp.write(urllib.request.urlopen(url).read())
    fp.seek(0)

    ff = FortranFile(fp, 'r')
    info = ff.read_ints()
    print(info)

印刷品:

[12808737]

相关问题 更多 >

    热门问题