从Google云端硬盘创建完整的文件夹结构,包括路径

时间:2019-07-01 08:40:12

标签: python google-drive-api directory-structure

目标:

利用两种解决方案之间相同的文件夹结构,确定哪些文件在我的本地硬盘上,而不在Google云端硬盘上(在线,非同步)。

详细信息:

我使用Google云端硬盘作为硬盘备份,目前已经上传了超过1TB的数据。文件存储在云中后,有时会删除硬盘上的文件以释放空间。我的Google云端硬盘上的文件总数超过了我的硬盘空间,因此我没有将GDrive文件夹同步到硬盘上。

我最近意识到并非硬盘上的所有文件也都在Google云端硬盘上,因此我想添加丢失的文件。不幸的是,我没有驱动器上缺少的文件的详尽列表。

选择的方法:

(很高兴考虑其他任何方法,如果您认为更简单/更快!)

使用Python脚本比较GDrive和HDD上各个文件夹的内容。幸运的是,文件夹的结构是相同的,即在Google云端硬盘上,我可能有一个Fotos / 2019 / January文件夹,而在我的硬盘上也有相同的结构。

对于本地副本,使用以下代码没有任何问题:

import os

hd_directories = []

for path, dirs, files in os.walk(r'D:'):
    for f in files:
        value = path+'\\'+f
        hd_directories.append(value)

这将产生以下输出:

D:\Fotos\2019\January\1.jpg
D:\Fotos\2019\January\2.jpg
D:\Fotos\2019\January\3.jpg

我尝试通过其API为Google云端硬盘获取类似的输出,但迄今为止却惨败。我要做的最好的事情是利用此脚本的稍作修改的版本(https://github.com/beatleuk/gdfl)将文件夹结构作为嵌套的HTML列表获取,但随后却难以将此嵌套的“ ul-li”列表压平到正确的文件夹中结构体。

编辑:我从运行此代码得到的示例输出是一个HTML文件,其结构如下:

<ul>
    <li> D
        <ul>
            <li> Fotos
                <ul>
                    <li> 2019
                        <ul>
                            <li> 1.jpg
                            <li> 2.jpg
                            <li> 3.jpg
                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

我花了将近一个星期的时间来尝试解决这个问题,但到目前为止却没有成功...是否有人知道如何最好地获得GDrive上所有文件的完整列表,包括它们的文件夹路径 ?

1 个答案:

答案 0 :(得分:0)

在执行file.list或file.get时,Google驱动器实际上并没有真正获取文件的完整路径的地方。

找出文件完整路径的唯一方法是从根目录开始,然后循环遍历所有文件,依次获取每个目录中的所有文件。这是一个漫长的过程。通常我会缓冲这些文件并在本地对其进行整理。

确实没有更好的方法可以做到这一点。下载每个文件时,必须像循环一样建立其目录结构。

我有一个执行此操作的示例,但是在C#中这样做可能对您没有太大帮助。