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

时间:2015-03-22 00:17:01

标签: python python-2.7 dropbox-api

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

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

但它无效

2 个答案:

答案 0 :(得分:6)

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)

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

答案 1 :(得分:0)

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

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

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

3。让Dropbox自动执行同步(不执行任何操作)

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

我并没有真正测量,但是在本地上我花了大约10秒,而在另一侧上我花了22分钟左右,所以总共比写本地文件夹快了 X 130倍投递箱执行同步操作,而不是使用人们出于未知原因推荐的其他方法写入投递箱