Python PyDrive-删除文件的内容

Python PyDrive-删除文件的内容,python,python-3.x,google-drive-api,pydrive,Python,Python 3.x,Google Drive Api,Pydrive,考虑使用该模块的以下代码: 从pydrive.auth导入GoogleAuth 从pydrive.drive导入GoogleDrive gauth=GoogleAuth() gauth.LocalWebserverAuth() 驱动器=谷歌驱动器(高斯) file=drive.CreateFile({'title':'test.txt'}) file.Upload()文件 file.SetContentString('hello') file.Upload()文件 file.SetContent

考虑使用该模块的以下代码:

从pydrive.auth导入GoogleAuth
从pydrive.drive导入GoogleDrive
gauth=GoogleAuth()
gauth.LocalWebserverAuth()
驱动器=谷歌驱动器(高斯)
file=drive.CreateFile({'title':'test.txt'})
file.Upload()文件
file.SetContentString('hello')
file.Upload()文件
file.SetContentString(“”)
file.Upload()#这会引发异常。
创建文件并更改其内容可以正常工作,直到我尝试通过将内容字符串设置为空来擦除内容。这样做会引发此异常:

pydrive.files.ApiRequestError
当我查看我的驱动器时,我看到test.txt文件成功创建,其中包含文本
hello
。然而,我希望它是空的

如果我将空字符串更改为任何其他文本,则文件将更改两次而不会出错。虽然这不清楚内容,所以这不是我想要的

当我在互联网上查找这个错误时,我在PyDrive github上发现了这个可能与此有关的问题,尽管它几乎一年都没有解决

如果你想重现这个错误,你必须创建你自己的项目,该项目使用谷歌驱动API,遵循PyDrive文档中的这一点

如何通过PyDrive擦除文件内容?

问题和解决方法: 当使用
resubable=True
时,似乎无法使用
0
字节的数据。因此,在这种情况下,需要上传空数据,而不使用
resumable=True
。但是当我看到PyDrive的脚本时,似乎默认使用了
resumable=True
。因此,在本例中,作为一种解决方法,我建议使用
请求
模块。从PyDrive的
gauth
检索访问令牌

当您的脚本被修改时,它将变成如下所示

修改脚本: 参考资料:
import io
import requests
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

gauth = GoogleAuth()
gauth.LocalWebserverAuth()
drive = GoogleDrive(gauth)

file = drive.CreateFile({'title': 'test.txt'})
file.Upload()

file.SetContentString('hello')
file.Upload()

# file.SetContentString()
# file.Upload()    # This throws an exception.

# I added below script.
res = requests.patch(
    "https://www.googleapis.com/upload/drive/v3/files/" + file['id'] + "?uploadType=multipart",
    headers={"Authorization": "Bearer " + gauth.credentials.token_response['access_token']},
    files={
        'data': ('metadata', '{}', 'application/json'),
        'file': io.BytesIO()
    }
)
print(res.text)