我有一个名为image_info_binary.data的二进制数据文件,我想根据该文件行中的信息下载许多FITS图像。如果我用pickle模块将这个文件加载到Python中并打印一个元素,就会得到:

import pickle
with open('image_info_binary', 'rb') as f:
    img_info = pickle.load(f)
print(img_info[0])

输出此字符串:
Object #: 2000073.0
Counter #: 2
Scan ID: 0245
Frame #: 167
Band #: 3
Image Link: http://....fits... #long url

大约有50000个这样的元素,每个元素都有不同的对象、计数器、fits图像URL等。我想浏览每个元素并将每个fits图像下载为:{int(object number)}_{three digit counter}_w{band}.fits
例如,我希望上面示例的下载图像2000073_002_w3.fits
最好的方法是什么?例如,我知道如果我只是下载一个图像,我可以简单地执行curl -o 2000073_002_w3.fits "url"。我不确定生成这些curl语句中的许多语句是否是最好的方法。如果我能在终端运行一个命令,那就太好了,但我也可以使用Python(但我觉得子进程可能会很慢)。谢谢您!

最佳答案

您可以通过在对象上迭代并将其分割为多个部分来生成url。

for img in img_info:
    attr = dict()
    for line in img.split('\n'):
        key, value = line.split(': ', 1)
        attr[key] = value
    filename = '{0}_{1:03}_w{2}.fits'.format(
        attr['Object #'], attr['Counter #'], attr['Band #'])
    url = attr['Image Link']

然后,您可以打印它们,或者将它们传递给subprocess.run(['curl', '-o', filename, url], check=True)或用Python本地下载它们。

关于python - 通过二进制文件生成许多curl命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51991089/

10-11 00:25