如何使用 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 倍到本地文件夹并让保管箱进行同步,而不是使用人们出于未知原因似乎推荐的其他方法写入保管箱
我想一次将整个文件夹上传到 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 倍到本地文件夹并让保管箱进行同步,而不是使用人们出于未知原因似乎推荐的其他方法写入保管箱