Python 3.x 通过Google Drive文件流上传大量文件

Python 3.x 通过Google Drive文件流上传大量文件,python-3.x,google-drive-api,Python 3.x,Google Drive Api,我正在制作一个PoC应用程序,它将通过文件流应用程序(DFS)将大量数据上传到Google Drive 我关心的主题是文件流如何专门处理上传文件的问题。根据我的研究,我发现当你将文件复制到谷歌硬盘(我指的是文件系统,通常是G:)时,它实际上被复制到应用程序的缓存(通常是%LOCALAPPDATA%/Google/DriveFS)中,在那里应用程序可以完成所有的上传。这很好,而且当您想要复制(比如)100 GB的数据,而只有50 GB的可用磁盘空间时,它会要求更多的磁盘空间,这也是合乎逻辑的。不过

我正在制作一个PoC应用程序,它将通过文件流应用程序(DFS)将大量数据上传到Google Drive

我关心的主题是文件流如何专门处理上传文件的问题。根据我的研究,我发现当你将文件复制到谷歌硬盘(我指的是文件系统,通常是
G:
)时,它实际上被复制到应用程序的缓存(通常是
%LOCALAPPDATA%/Google/DriveFS
)中,在那里应用程序可以完成所有的上传。这很好,而且当您想要复制(比如)100 GB的数据,而只有50 GB的可用磁盘空间时,它会要求更多的磁盘空间,这也是合乎逻辑的。不过,我还是想上传这100 GB。显然,解决方案是将其拆分为块,然后相应地复制它们,但我的问题是:我如何才能知道DFS是否完成了前一块的上载,然后我可以复制另一块

我做了一些上载两个~2.5 GB文件的实验,以几分钟的间隔开始上载,这样我可以检查DFS缓存的大小,它大致符合预期:在任何事情之前,它是几MB,在我复制第一个文件后,它增加了约2.5 GB,在第二个文件后,它又增加了类似的数量。一切如期而至。现在,我预计上传完第一个文件后,缓存会再次缩小文件的大小,但令我惊讶的是,没有任何变化。即使在第二个文件完成后,它仍然坚不可摧。这就是我的问题所在——我该如何逐块上传数据?我真的,真的不想调用gdriveapi来查看文件是否上传;我正在使用DFS,这样我就不必在其中包含任何授权混乱


任何见解都会有所帮助。哦,我正在开发Python,但这与问题并不完全相关。

经过调查和反复尝试,我想出了有效的解决方案。根据答案,我复制了一个文件块(比如10个),它们定期检查DFS上的md5 checksum属性,与本地计算的属性进行比较,直到块中的所有文件都检查:

从hashlib导入md5
从pathlib导入路径
从shutil导入copy2
从时间上导入睡眠
def file_校验和(file_路径:Union[path,str])->str:
hash_md5=md5()
打开(文件路径“rb”)作为f:
对于iter中的块(lambda:f.read(4096),b“”):
hash_md5.update(块)
返回hash_md5.hexdigest()
file=Path(“C:/example.tst”)
校验和=文件\校验和(文件)
dst=路径(“G:/My Drive”)/file.name
副本2(文件,dst)
打印(“已开始上载”,end=“”,flush=True)
而路径(f“{dst}:user.drive.md5”).readtext()!=校验和:
打印(“.”,end=“”,flush=True)
睡眠(1)
打印(“已上载!”)