You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python读取JSON文件并以字典键值命名创建文件及下载视频

解决方法:从JSON提取目录名、创建目录并下载视频

你已经走对了大部分流程,核心问题是JSON里的Word字段是数组类型——你拿到的["0"]是一个列表,只需要取列表的第一个元素,就能得到不带括号和引号的目录名啦!下面一步步拆解解决方案:

1. 正确提取Word字段的内容

你的JSON中每个对象的Word是单元素数组,所以循环里直接用words["Word"][0]就能拿到"0"、"10"这类你需要的字符串。修改后的读取部分代码:

import json
import os

# 读取JSON文件
with open('filename.json') as f:
    data = json.load(f)

for item in data:
    # 提取数组里的第一个元素作为目录名
    dir_name = item["Word"][0]
    video_url = item["URL"]
    print(dir_name)  # 现在会输出"0"、"10"这类目标名字

2. 创建目录(避免重复创建报错)

用os.makedirs可以一次性创建多级目录,加上exist_ok=True参数,就算目录已经存在也不会抛出异常,比单独用os.mkdir更省心:

# 定义主目录
main_dir = "Videos"

for item in data:
    dir_name = item["Word"][0]
    # 拼接完整的子目录路径
    full_dir_path = os.path.join(main_dir, dir_name)
    # 创建目录(如果已存在则跳过)
    os.makedirs(full_dir_path, exist_ok=True)
    print(f"已创建目录:{full_dir_path}")

3. 下载URL对应的视频

根据你的视频来源,推荐两种下载方案:

方案一:用requests下载通用视频文件

如果是普通HTTP链接的视频文件,用requests就能搞定:

import requests

for item in data:
    dir_name = item["Word"][0]
    video_url = item["URL"]
    full_dir_path = os.path.join("Videos", dir_name)
    
    # 创建目录
    os.makedirs(full_dir_path, exist_ok=True)
    
    # 自定义视频文件名(这里用目录名作为文件名,也可以从URL提取)
    video_filename = f"{dir_name}.mp4"
    full_video_path = os.path.join(full_dir_path, video_filename)
    
    # 分段下载大文件
    try:
        response = requests.get(video_url, stream=True)
        response.raise_for_status()  # 检查请求是否成功
        
        with open(full_video_path, 'wb') as video_file:
            for chunk in response.iter_content(chunk_size=8192):
                video_file.write(chunk)
        print(f"视频已下载到:{full_video_path}")
    except Exception as e:
        print(f"下载{video_url}失败:{str(e)}")

方案二:用yt-dlp下载视频平台的视频

如果你的URL是YouTube、B站这类视频平台的链接,yt-dlp会自动处理解析和下载,先安装依赖:

pip install yt-dlp

然后使用以下代码:

from yt_dlp import YoutubeDL

for item in data:
    dir_name = item["Word"][0]
    video_url = item["URL"]
    full_dir_path = os.path.join("Videos", dir_name)
    
    os.makedirs(full_dir_path, exist_ok=True)
    
    # yt-dlp配置:指定下载目录和文件名格式
    ydl_opts = {
        'outtmpl': os.path.join(full_dir_path, '%(title)s.%(ext)s'),
        'quiet': False,
    }
    
    try:
        with YoutubeDL(ydl_opts) as ydl:
            ydl.download([video_url])
        print(f"视频已下载到目录:{full_dir_path}")
    except Exception as e:
        print(f"下载{video_url}失败:{str(e)}")

完整整合脚本

把所有步骤整合起来,就是一个能直接运行的完整脚本:

import json
import os
import requests

# 读取JSON数据
with open('filename.json') as f:
    data = json.load(f)

main_dir = "Videos"

for item in data:
    # 提取目录名和视频URL
    dir_name = item["Word"][0]
    video_url = item["URL"]
    full_dir_path = os.path.join(main_dir, dir_name)
    
    # 创建目录
    os.makedirs(full_dir_path, exist_ok=True)
    
    # 下载视频(这里用requests示例,可替换为yt-dlp)
    video_filename = f"{dir_name}.mp4"
    full_video_path = os.path.join(full_dir_path, video_filename)
    
    try:
        response = requests.get(video_url, stream=True)
        response.raise_for_status()
        
        with open(full_video_path, 'wb') as f:
            for chunk in response.iter_content(chunk_size=8192):
                f.write(chunk)
        print(f"成功处理:{dir_name}")
    except Exception as e:
        print(f"处理{dir_name}失败:{str(e)}")

内容的提问来源于stack exchange,提问作者Slacoff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 22:52:44