通过二进制文件生成许多curl命令

时间:2018-08-23 17:15:08

标签: python linux download pickle binaryfiles

我有一个名为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

大约有50,000个元素,每个元素具有不同的对象#,计数器#,适合图像URL,等等。我想遍历这些元素并将每个FITS图像下载为:{int(object number)}_{three digit counter}_w{band}.fits。 / p>

例如,我希望以上示例的下载图像为2000073_002_w3.fits

做到这一点的最佳方法是什么?我知道我是否仅下载一个映像,例如,我可以简单地执行curl -o 2000073_002_w3.fits "url"。我不确定生成许多这些curl语句是否是执行此操作的最佳方法。如果我可以只在终端中运行命令,那会很棒,但是我也可以使用Python(但是我觉得子进程可能会很慢)。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以通过遍历对象并将它们拆分为多个部分来生成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本地下载。

相关问题