Python 使用RESTAPI在google drive中创建新文件夹

Python 使用RESTAPI在google drive中创建新文件夹,python,google-api,google-drive-api,google-python-api,Python,Google Api,Google Drive Api,Google Python Api,如果google drive中不存在新文件夹,如何使用python在其中创建新文件夹? 我对谷歌API和python完全陌生 (我的帐户有一个访问令牌,我想使用它创建文件夹。) 创建文件夹 import json import requests headers = {"Authorization": "Bearer Token"} data = { "name": "name", "mimeType": "application/vnd.google-apps.folder"

如果google drive中不存在新文件夹,如何使用python在其中创建新文件夹? 我对谷歌API和python完全陌生

(我的帐户有一个访问令牌,我想使用它创建文件夹。)

创建文件夹

import json
import requests
headers = {"Authorization": "Bearer Token"}

data = {
    "name": "name",
    "mimeType": "application/vnd.google-apps.folder"
}

r = requests.post("https://www.googleapis.com/drive/v3/files",
    headers=headers,data = data)
print(r.text)

仅创建文件,而不是文件夹。我如何纠正这个问题?

您的第一步是定义“仅当它不存在时”的含义。在Google Drive中,文件(文件夹只是一个具有特殊mime类型的文件)由其ID标识,而不是由其名称标识。所以我可以有很多文件夹,都是同名的

我假设“仅当它不存在时”实际上意味着“仅当具有给定名称的文件夹不存在时”。这些步骤是:-

  • 执行文件/列表查询
    name=foldername,trashed=false,mime type=application/vnd.google apps.folder
    。确保您的files.list正确处理
    nextPageToken
  • 如果结果计数=0,则files.create foldername
  • 
    def get_文件夹_id(自身、文件夹、父项):
    _r=无
    尝试:
    url='1〕https://www.googleapis.com/drive/v3/files?q={0}'. \
    格式(报价)(
    “mimeType='application/vnd.google apps.folder'”
    “和名称='{0}'”
    “和垃圾!=真的”
    “和父母中的{1}”。格式(文件夹,父母),
    安全=“~()*!.\”
    )
    )
    _r=requests.get(url、标题={
    “授权”:“承载{0}”.format(self.get\u access\u token()),
    “内容类型”:self.file\u bean.get\u Content\u Type(),
    })
    _r、 为_状态()提出_
    _dict=_r.json()
    如果_dict和len中的'files'(_dict['files']):
    返回_dict['files'][0]['id']
    其他:
    _f=自创建文件夹(文件夹,父文件夹)
    如果:
    返回
    status,status\u message=self.get\u文件夹无效()
    除了requests.exceptions.HTTPError:
    status,status\u message=self.get\u http\u错误(\u r)
    例外情况除外,如e:
    记录器.异常(e)
    status,status\u message=self.get\u未知\u错误()
    def创建文件夹(自身、文件夹名称、父文件夹id):
    url='1〕https://www.googleapis.com/drive/v3/files'
    标题={
    'Authorization':'Bearer{}'。格式(self.get_access_token()),#获取您的访问令牌
    “内容类型”:“应用程序/json”
    }
    元数据={
    “名称”:文件夹名称,#文件夹名称作为字符串
    “parents”:[parent_folder_id],#parent folder id(=如果要在根目录中创建文件夹,则为“root”)
    “mimeType”:“application/vnd.google apps.folder”
    }
    response=requests.post(url,headers=headers,data=json.dumps(元数据))
    response=response.json()
    如果“错误”未响应:
    返回响应['id']#最后返回文件夹id
    
    使用get_folder_id,如果文件夹不存在,它会在内部创建一个文件夹


    PS:此代码是从我的作品中盲目复制的,如果您理解有任何困难,我可以详细说明答案。

    thx供发布。请注意,您的代码有一个bug。它需要在
    文件的返回字段中包含nextPageToken。列出
    ,如果不为空,则进行迭代。感谢我缺少
    “Content-Type”:“application/json”
    -将创建该文件,但不在父文件夹中,并且没有名称