如何使用 python 将完整文件夹上传到 Dropbox

How to upload complete folder to Dropbox using python

我想一次将整个文件夹上传到 Dropbox,但我似乎无法完成,可以吗?即使我尝试上传单个文件,我也必须在 Dropbox 路径中精确确定文件扩展名,还有其他方法吗? 我正在使用的代码

client = dropbox.client.DropboxClient(access_token)
f= open(file_path)
response = client.put_file('/pass',f )

但它不起作用

Dropbox SDK 不会自动为您找到所有本地文件,因此您需要自己枚举它们并一次上传一个。 os.walk 是在 Python.

中执行此操作的便捷方法

下面是工作代码,在注释中有一些解释。用法是这样的:python upload_dir.py abc123xyz /local/folder/to/upload /path/in/Dropbox:

import os
import sys

from dropbox.client import DropboxClient

# get an access token, local (from) directory, and Dropbox (to) directory
# from the command-line
access_token, local_directory, dropbox_destination = sys.argv[1:4]

client = DropboxClient(access_token)

# enumerate local files recursively
for root, dirs, files in os.walk(local_directory):

    for filename in files:

        # construct the full local path
        local_path = os.path.join(root, filename)

        # construct the full Dropbox path
        relative_path = os.path.relpath(local_path, local_directory)
        dropbox_path = os.path.join(dropbox_destination, relative_path)

        # upload the file
        with open(local_path, 'rb') as f:
            client.put_file(dropbox_path, f)

EDIT:请注意,此代码不会创建空目录。它会将所有文件复制到 Dropbox 中的正确位置,但如果有空目录,则不会创建这些文件。如果您想要空目录,请考虑使用 client.file_create_folder(在循环中使用 dirs 中的每个目录)。

对我来说,有一个更好的方法,因为 Dropbox 正在本地机器上安装一个文件夹,您可以使用它并用 python 写入该文件夹,就像写入任何文件夹一样:

1.在本地计算机或服务器上安装 Dropbox 应用程序(和文件夹)

2。将您想要的文件和文件夹以与之前相同的方式写入 dropbox 文件夹目录

3。让 dropbox 自动同步(什么都不做)

dropbox 通常会在本地安装一个 "share" 驱动器。当您在远程上传时,有很多同步开销会使所有过程变慢。我选择让 dropbox 在后台进行同步,这对我面临的问题更有意义,我猜它是大多数问题的正确解决方案。请记住,保管箱不是远程数据库,它是一个镜像到各处的本地文件夹。

我并没有真正测量但是在本地它花了我大约 10 秒,另一种方式花了大约 22 分钟所以总的来说它比写快 X 130 倍到本地文件夹并让保管箱进行同步,而不是使用人们出于未知原因似乎推荐的其他方法写入保管箱