OneDrive 释放 space Python

OneDrive free up space with Python

我一直在使用 OneDrive 存储大量图像,现在我需要处理这些图像,所以我已将我的 OneDrive 文件夹同步到我的计算机,这相对不占用磁盘空间 space。但是,由于我必须在我的代码中 open() 它们,它们都会被下载,这将比我计算机上的可用内存占用更多​​。我可以在右键单击上下文菜单中手动使用 释放 space 操作,这样可以使它们保持同步而无需使用 space.

我正在寻找一种方法来做同样的事情,但是在我的代码中,在我处理完每张图像之后。

试图找到如何获取上下文菜单项的命令将我带到了注册表中的这两个地方:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell

HKEY_LOCAL_MACHINE\SOFTWARE\Classes*\shellex\ContextMenuHandlers

但是我找不到任何与之相关的东西,而且那些树有太多的钥匙,无法盲目检查。 this forum post(在 link 之外)显示了一些自动释放 space 的方法,但它似乎会影响所有文件并且仅限于整天间隔。

那么有什么方法可以访问该命令或释放 python 中的 space 吗?

根据 this microsoft post 可以调用 Attrib.exe 对文件进行这种操作.

这个小片段完成了 per-file 用法的工作。如链接 post 所示,也可以使用 /s 参数对文件夹的全部内容执行此操作,等等。

import subprocess

def process_image(path):
    # Open the file, which downloads it automatically
    with open(path, 'r') as img:
        print(img)

    # Free up space (OneDrive) after usage
    subprocess.run('attrib +U -P "' + path + '"')

下载和释放 space 相当快,但在 运行 这种高度并行的情况下,可能会消耗一些磁盘 space 一段时间很短的时间。但总的来说,这是非常瞬间的。

除了 Mat 的回答。如果您正在处理 Mac 那么您可以将 Attrib.exe 替换为 "/Applications/OneDrive.App/Contents/MacOS/OneDrive /unpin" 使文件仅在线。

import subprocess

path = "/Users/OneDrive/file.png"
subprocess.run(["/Applications/OneDrive.App/Contents/MacOS/OneDrive", "/unpin", path])