我一直在使用OneDrive存储大量图像,现在我需要对其进行处理,因此我已将OneDrive文件夹同步到计算机上,该计算机上的磁盘空间相对较小。但是,由于我必须在代码中open()
进行下载,所以它们都被下载了,这比我计算机上的可用内存要多得多。我可以在右键单击上下文菜单中手动使用 释放空间 操作,这样可以使它们保持同步而不占用空间。
我正在寻找一种方法来做同样的事情,但是在处理完每张图像之后,用我的代码代替。
试图找到上下文菜单项的命令使我进入了注册表中的两个位置:
HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Directory \ shell
HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes * \ shellex \ ContextMenuHandlers
但是我找不到与之相关的任何东西,那些树的键太多了,无法盲目检查。另外,this forum post(外部链接)显示了几种自动释放空间的方法,但它似乎影响所有文件,并且仅限于整天间隔。
那么有什么办法可以访问该命令或释放python中的空间?
答案 0 :(得分:0)
根据this microsoft post,可以调用 Attrib.exe 对文件进行这种处理。
这个小片段可以完成每个文件的使用。如链接的文章中所示,还可以使用/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 + '"')
下载和释放空间的速度相当快,但是如果大量并行运行,可能会在短时间内消耗一些磁盘空间。一般来说,这是瞬时的。
答案 1 :(得分:0)
除了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])