通过二进制文件生成很多curl命令
Generate many curl commands through binary file
我有一个名为 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
.
例如,我希望上面示例的下载图像为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 中本地下载它们。
我有一个名为 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
.
例如,我希望上面示例的下载图像为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 中本地下载它们。