c00*_*ter 18 python directory dropbox
我有一个脚本,打算由多台计算机上的多个用户运行,并且它们的各自主目录中都没有Dropbox文件夹.我不想在脚本中硬编码路径.我更倾向于以编程方式找出路径.
欢迎任何建议.
编辑:我没有在脚本中使用Dropbox API,该脚本只是读取用户之间共享的特定Dropbox文件夹中的文件.我唯一需要的是Dropbox文件夹的路径,因为我当然已经知道Dropbox文件结构中的相对路径.
编辑:如果重要,我使用的是Windows 7.
c00*_*ter 16
我在这里找到了答案.设置s等于第二行~\AppData\Roaming\Dropbox\host.db然后用base64解码它给出了路径.
def _get_appdata_path():
import ctypes
from ctypes import wintypes, windll
CSIDL_APPDATA = 26
_SHGetFolderPath = windll.shell32.SHGetFolderPathW
_SHGetFolderPath.argtypes = [wintypes.HWND,
ctypes.c_int,
wintypes.HANDLE,
wintypes.DWORD,
wintypes.LPCWSTR]
path_buf = wintypes.create_unicode_buffer(wintypes.MAX_PATH)
result = _SHGetFolderPath(0, CSIDL_APPDATA, 0, 0, path_buf)
return path_buf.value
def dropbox_home():
from platform import system
import base64
import os.path
_system = system()
if _system in ('Windows', 'cli'):
host_db_path = os.path.join(_get_appdata_path(),
'Dropbox',
'host.db')
elif _system in ('Linux', 'Darwin'):
host_db_path = os.path.expanduser('~'
'/.dropbox'
'/host.db')
else:
raise RuntimeError('Unknown system={}'
.format(_system))
if not os.path.exists(host_db_path):
raise RuntimeError("Config path={} doesn't exists"
.format(host_db_path))
with open(host_db_path, 'r') as f:
data = f.read().split()
return base64.b64decode(data[1])
Run Code Online (Sandbox Code Playgroud)
ric*_*3rd 11
Dropbox帮助中心有一个答案 - 如何以编程方式查找Dropbox文件夹路径?
使用~/.dropbox/info.json或%APPDATA%\Dropbox\info.json
以这种方式访问有效%APPDATA%或%LOCALAPPDATA%位置:
import os
from pathlib import Path
import json
try:
json_path = (Path(os.getenv('LOCALAPPDATA'))/'Dropbox'/'info.json').resolve()
except FileNotFoundError:
json_path = (Path(os.getenv('APPDATA'))/'Dropbox'/'info.json').resolve()
with open(str(json_path)) as f:
j = json.load(f)
personal_dbox_path = Path(j['personal']['path'])
business_dbox_path = Path(j['business']['path'])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10997 次 |
| 最近记录: |