无法使用字符串值将字符串值更改为变量

时间:2017-09-10 10:26:14

标签: python python-3.x dropbox-api

我将文件上传到dropbox api,但它在dropbox上发布了自根文件夹以来我计算机上的所有目录。我的意思是你有文件夹在文件夹中的文件夹,而不是用户,直到你去文件sours文件夹。如果我剪切结构库,则无法看到它是文件,而不是字符串并给出错误消息。 我的代码是:

def upload_file(project_id, filename, dropbox_token):
    dbx = dropbox.Dropbox(dropbox_token)
    file_path = os.path.abspath(filename)
    with open(filename, "rb") as f:
        dbx.files_upload(f.read(), file_path, mute=True)
        link = dbx.files_get_temporary_link(path=file_path).link
        return link

它有效,但我需要类似的东西:

file_path = os.path.abspath(filename)
    chunks = file_path.split("/")
    name, dir = chunks[-1], chunks[-2]

这让我错了:

dropbox.exceptions.ApiError: ApiError('433249b1617c031b29c3a7f4f3bf3847', GetTemporaryLinkError('path', LookupError('not_found', None)))

我怎样才能在路径中只创建父文件夹和文件名?

例如,如果我有

/home/user/project/file.txt

我需要

/project/file.txt

2 个答案:

答案 0 :(得分:1)

我认为以下代码应该有效:

def upload_file(project_id, filename, dropbox_token):
    dbx = dropbox.Dropbox(dropbox_token)
    abs_path = os.path.abspath(filename)

    directory, file = os.path.split(abs_path)
    _, directory = os.path.split(directory)
    dropbox_path = os.path.join(directory, file)

    with open(abs_path, "rb") as f:
        dbx.files_upload(f.read(), dropbox_path, mute=True)
        link = dbx.files_get_temporary_link(path=dropbox_path).link
        return link

答案 1 :(得分:1)

您有/home/user/project/file.txt,需要/project/file.txt

我会根据os默认分隔符进行拆分(因此它也适用于Windows路径),然后使用正确的格式(sep + path)重新格式化最后两个部分并加入。

import os
#os.sep = "/"  # if you want to test that on Windows
s = "/home/user/project/file.txt"
path_end = "".join(["{}{}".format(os.sep,x) for x in s.split(os.sep)[-2:]])

结果:

/project/file.txt