下载google drive上的数据集方法

前言

最近需要下个存在Google Drive上的数据集,用浏览器下载总是下一会就失败。最后想了个办法用python直接下,比浏览器下稳定很多。

本文灵感来自如何优雅的快速下载谷歌云盘的大文件 (二)

1、google drive

首先把要下载数据集文件夹的快捷方式存到云盘里
在这里插入图片描述

然后下载windows的google drive登陆之后,资源管理器中就会出现一个虚拟地址,打开可以看到刚刚存的快捷方式
在这里插入图片描述
在这里插入图片描述

2、代理挂上全局

建议用个稳定点的

3、跑下python

import os
import shutil
import time

def copy_with_progress(src, dst, max_retries=3):
    total_size = os.path.getsize(src)

    for attempt in range(max_retries):
        copied_size = 0

        with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
            while True:
                buf = fsrc.read(1024 * 1024)  # 每次读取 1MB
                if not buf:
                    break
                fdst.write(buf)
                copied_size += len(buf)
                percent = (copied_size / total_size) * 100
                print(f"\r复制进度: {percent:.2f}% ({copied_size}/{total_size} 字节)", end="", flush=True)

        print()  # 打印一个换行

        # 比较文件大小
        dst_size = os.path.getsize(dst)
        if dst_size == total_size:
            print("文件大小匹配,复制成功。")
            return True
        else:
            print(f"文件大小不匹配。源文件: {total_size} 字节,目标文件: {dst_size} 字节")
            if attempt < max_retries - 1:
                print(f"尝试重新复制(第 {attempt + 2} 次)...")
            else:
                print("达到最大重试次数。复制失败。")
                return False

def copy_files(src_dir, dst_dir):
    if not os.path.exists(dst_dir):
        os.makedirs(dst_dir)

    total_files = sum([len(files) for r, d, files in os.walk(src_dir)])
    completed_files = 0
    failed_files = []
    skipped_files = []

    for root, dirs, files in os.walk(src_dir):
        for file in files:
            src_path = os.path.join(root, file)
            dst_path = os.path.join(dst_dir, os.path.relpath(src_path, src_dir))

            # 确保目标目录存在
            os.makedirs(os.path.dirname(dst_path), exist_ok=True)

            # 检查目标文件是否存在,如果存在则比较大小
            if os.path.exists(dst_path):
                src_size = os.path.getsize(src_path)
                dst_size = os.path.getsize(dst_path)
                if src_size == dst_size:
                    print(f"跳过: {src_path} (文件已存在且大小相同)")
                    skipped_files.append(src_path)
                    completed_files += 1
                    continue

            print(f"正在复制: {src_path}{dst_path}")
            print(f"进度: {completed_files + 1}/{total_files}")
            try:
                success = copy_with_progress(src_path, dst_path)
                if not success:
                    print(f"警告: 无法成功复制 {src_path}")
                    failed_files.append(src_path)
            except Exception as e:
                print(f"复制 {src_path} 时出错: {e}")
                failed_files.append(src_path)

            completed_files += 1

    return failed_files, skipped_files

if __name__ == "__main__":
    src_dir = r"这里填刚刚存的快捷方式路径"
    dst_dir = r"改为下载到哪"

    start_time = time.time()
    failed_files, skipped_files = copy_files(src_dir, dst_dir)
    end_time = time.time()

    print(f"\n复制过程完成。总用时: {end_time - start_time:.2f} 秒")

    if failed_files:
        print("\n以下文件复制失败:")
        for file in failed_files:
            print(file)
    else:
        print("\n所有需要复制的文件复制成功。")

    if skipped_files:
        print(f"\n跳过了 {len(skipped_files)} 个文件 (已存在且大小相同)。")

逐个把文件copy出来,这里简单加了跳过已完成的文件和失败重试,一遍遍跑直到下完就行,也可以一直循环到全部下好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值