koma610630 发表于 2023-9-12 14:41:26

如何处理json文件并进行批量下载

有一个json文件的数据形式为

{
        "version":"1.14",
        "assets":{
                "f9e0ff803254ae227014841bbced0ecb.zip":{"md5":"20e6c9b24536b9275757eee619d3dbe1", "compressed":true, "size":61675},
                "2c17cca357ed43c8db9ed5633ac6486e.zip":{"md5":"25690e3dee7418e2dd43688bf050486c", "compressed":true, "size":17863},
                "a7872e309036a186b4b37ecf17ac9e95.zip":{"md5":"b4f4ce27c9f75f6d9922b6f572dba816", "compressed":true, "size":7533450},
                "7c329958c81689ac9b4b1693554014a5.zip":{"md5":"1e5a971a3735ebdc2bec82e01364de86", "compressed":true, "size":20572}
        },
        "searchPaths" : []
}

如何进行批量下载 *.zip
比如批量下载 h ttp:/.xxx.com/f9e0ff803254ae227014841bbced0ecb.zip
                  h ttp:/.xxx.com/2c17cca357ed43c8db9ed5633ac6486e.zip
                  h ttp:/.xxx.com/a7872e309036a186b4b37ecf17ac9e95.zip
                  h ttp:/.xxx.com/7c329958c81689ac9b4b1693554014a5.zip

下载完毕后 自动解压到当前目录

isdkz 发表于 2023-9-12 14:41:33

可以使用Python中的requests和zipfile模块来实现。具体代码如下:

import requests
import zipfile
import io
import json

# 读取json文件
with open('file.json', 'r') as f:
    data = json.load(f)

# 遍历assets字典,下载并解压zip文件
for key, value in data['assets'].items():
    if key.endswith('.zip'):
      url = 'http://xxx.com/' + key
      r = requests.get(url)
      with zipfile.ZipFile(io.BytesIO(r.content)) as z:
            z.extractall('.')


首先使用 json.load() 方法读取json文件,然后遍历 assets 字典,找到以 .zip 结尾的文件,拼接url进行下载。下载完成后,使用 zipfile.ZipFile() 方法打开zip文件,并使用 extractall() 方法解压到当前目录。

koma610630 发表于 2023-9-12 14:51:12

isdkz 发表于 2023-9-12 14:41
可以使用Python中的requests和zipfile模块来实现。具体代码如下:




需要可视化操作 ,点击按钮打开选择指定json 然后点击开始下载

isdkz 发表于 2023-9-12 17:11:09

本帖最后由 isdkz 于 2023-9-12 17:14 编辑

koma610630 发表于 2023-9-12 14:51
需要可视化操作 ,点击按钮打开选择指定json 然后点击开始下载

import tkinter as tk
from tkinter import filedialog
import requests
import zipfile
import io
import json

# 定义开始下载函数
def start_download():
    filepath = filepath_var.get()
    with open(filepath, 'r') as f:
      data = json.load(f)
    # 遍历assets字典,下载并解压zip文件
    for key, value in data['assets'].items():
      if key.endswith('.zip'):
            url = 'http://xxx.com/' + key
            r = requests.get(url)
            with zipfile.ZipFile(io.BytesIO(r.content)) as z:
                z.extractall('.')
    # 下载完成后弹出提示框
    tk.messagebox.showinfo('提示', '下载完成!')

# 创建主窗口和各种控件
root = tk.Tk()
root.title('批量下载')
root.geometry('300x150')
filepath_var = tk.StringVar()
filepath_label = tk.Label(root, text='请选择json文件:')
filepath_label.pack(pady=10)
filepath_entry = tk.Entry(root, textvariable=filepath_var)
filepath_entry.pack(pady=5)
def choose_file():
    filepath = filedialog.askopenfilename()
    filepath_var.set(filepath)
choose_file_button = tk.Button(root, text='选择文件', command=choose_file)
choose_file_button.pack(pady=5)
confirm_button = tk.Button(root, text='开始下载', command=start_download)
confirm_button.pack(pady=10)

# 进入消息循环
root.mainloop()

歌者文明清理员 发表于 2023-9-12 17:31:19

isdkz 发表于 2023-9-12 17:11


{:5_106:}
页: [1]
查看完整版本: 如何处理json文件并进行批量下载