使用 Python 将 Google 驱动器文件下载到特定位置

Download Google Drive files to a specific location using Python

大家好,
我想将 google-drive 文件直接下载到我电脑上的文件夹,而不是标准的下载文件夹。另外,文件名应该保持不变,不要手动设置。

我试过使用直接下载 link 下载文件,但您无法决定文件在计算机上的保存位置。

我也试过这些方法:
(这个方法对我没用) (用这种方法我无法得到文件的原始名称)

在我的代码中,我基本上有很多这些类型的 url:
https://drive.google.com/file/d/xxxxxxxxxxxxxxxxxxx/view?usp=drive_web

但我可以轻松地将它们转换为这些直接下载网址:
https://drive.google.com/u/0/uc?id=xxxxxxxxxxxxxxxxxxx&export=download

我只是没有找到如何使用 python 将文件下载到特定文件夹,同时保持文件原始名称不变的方法。

解决方案

使用@Jacques-GuzelHeron 建议的方法,我现在有了这段代码:

    creds = None
    # The file token.json stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Save the credentials for the next run
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    service = build('drive', 'v3', credentials=creds)
    for id_url in list_urls:
        file_id = id_url
        results = service.files().get(fileId=file_id).execute()
        name = results['name']
        request = service.files().get_media(fileId=file_id)
        fh = io.BytesIO()
        downloader = MediaIoBaseDownload(fh, request)
        done = False
        while done is False:
            status, done = downloader.next_chunk()
            print("Download %d%%." % int(status.progress() * 100))

        fh.seek(0)
        # Write the received data to the file
        path = "PATH/TO/MY/FOLDER/" + name
        with open(path, 'wb') as f:
            shutil.copyfileobj(fh, f)

这是 python quickstart page and the example code 提供的代码。

我使用 google-drive-api 通过 ID 搜索名称,稍后我可以将其添加回路径:

        path = "PATH/TO/MY/FOLDER/" + name
        with open(path, 'wb') as f:
            shutil.copyfileobj(fh, f)

这让我可以控制下载的存储路径并保持文件名不变。绝对不是我最好的代码,但它确实完成了工作。

我了解到您有一系列云端硬盘文件链接,并且您想使用 Python 在本地下载它们。我假设您想下载存储在 Drive 上的文件,而不是 Workspace 文件(即 Docs、Sheets……)。您可以按照 Drive API Python quickstart 指南轻松完成。该演练将安装所有必要的依赖项并向您展示示例代码。然后,你只需要编辑主要功能来下载文件而不是示例操作。

要下载 Python 文件,您只需要知道它的 ID 并使用 Files.get method. I see that you already know the ids, so you are ready to make the request. To build the request you should introduce the id of the file and set the parameter alt to the value media. If you are using the example from the paragraph above, you can do it just by using the id like this example。如果这些指南不适合您,请告诉我。