如何在Google Colaboratory中获取新建文件夹的ID及公开链接?
获取Google Colab中新建文件夹的Drive ID及公开链接
你的代码用basename提取的只是文件夹名称,这是因为Colab挂载的Drive路径是本地文件系统的映射,无法通过普通文件操作获取Google Drive的文件夹ID——必须借助Drive API读取文件元数据才能拿到ID。下面是两种可行的解决方案:
方法一:使用PyDrive库(简洁易用)
PyDrive是Google Drive API的Python封装,能直接操作Drive的文件元数据。
1. 安装依赖并初始化认证
!pip install -U pydrive from google.colab import auth from pydrive.auth import GoogleAuth from pydrive.drive import GoogleDrive from oauth2client.client import GoogleCredentials # 完成Drive认证 auth.authenticate_user() gauth = GoogleAuth() gauth.credentials = GoogleCredentials.get_application_default() drive = GoogleDrive(gauth)
2. 创建文件夹并获取ID+公开链接
from google.colab import drive as colab_drive import os # 挂载Drive到Colab colab_drive.mount('/content/drive') base_dir = '/content/drive/MyDrive/Envato Share/' os.chdir(base_dir) folder_name = input("Enter the folder name: ") folder_path = os.path.join(base_dir, folder_name) # 创建文件夹(不存在则创建) if not os.path.exists(folder_path): os.makedirs(folder_path) # 搜索目标文件夹的元数据(匹配名称+父文件夹+类型) parent_folder = base_dir.split('/drive/MyDrive/')[-1].rstrip('/') query = f"title='{folder_name}' and '{parent_folder}' in parents and mimeType='application/vnd.google-apps.folder'" file_list = drive.ListFile({'q': query}).GetList() if file_list: folder_id = file_list[0]['id'] print(f"文件夹ID: {folder_id}") # 生成公开访问链接(已设为公开状态时可用) public_link = f"https://drive.google.com/drive/folders/{folder_id}?usp=sharing" print(f"公开访问链接: {public_link}") else: print("未找到对应文件夹,请检查名称是否唯一或路径是否正确")
方法二:直接调用Drive REST API
如果不想依赖第三方库,可直接发送API请求获取ID:
1. 获取访问令牌
from google.colab import auth import requests auth.authenticate_user() # 提取Google账号的访问令牌 access_token = !gcloud auth print-access-token access_token = access_token[0] headers = {'Authorization': f'Bearer {access_token}'}
2. 查询文件夹ID并生成链接
from google.colab import drive as colab_drive import os colab_drive.mount('/content/drive') base_dir = '/content/drive/MyDrive/Envato Share/' folder_name = input("Enter the folder name: ") folder_path = os.path.join(base_dir, folder_name) if not os.path.exists(folder_path): os.makedirs(folder_path) # 先获取父文件夹(Envato Share)的ID parent_query = f"name='{os.path.basename(base_dir.rstrip('/'))}' and 'root' in parents and mimeType='application/vnd.google-apps.folder'" parent_url = f"https://www.googleapis.com/drive/v3/files?q={parent_query}&fields=files(id)" parent_res = requests.get(parent_url, headers=headers).json() if parent_res.get('files'): parent_id = parent_res['files'][0]['id'] # 查询目标文件夹的ID folder_query = f"name='{folder_name}' and '{parent_id}' in parents and mimeType='application/vnd.google-apps.folder'" folder_url = f"https://www.googleapis.com/drive/v3/files?q={folder_query}&fields=files(id)" folder_res = requests.get(folder_url, headers=headers).json() if folder_res.get('files'): folder_id = folder_res['files'][0]['id'] print(f"文件夹ID: {folder_id}") public_link = f"https://drive.google.com/drive/folders/{folder_id}?usp=sharing" print(f"公开访问链接: {public_link}") else: print("未找到目标文件夹") else: print("未找到父文件夹Envato Share,请检查路径是否正确")
注意事项
- 如果存在同名文件夹,上述代码会返回第一个匹配的结果,建议确保文件夹名称唯一,避免混淆。
- 确保你的Google账号已完成Colab的Drive认证,且有权限访问目标文件夹。
内容的提问来源于stack exchange,提问作者MD. Muinul Islam
相关产品推荐
相关产品推荐

