【问题标题】:Is it possible to determine, in Python, whether two partitions are on the same disk?是否可以在 Python 中确定两个分区是否在同一个磁盘上?
【发布时间】:2020-04-21 17:40:39
【问题描述】:

我现在使用的是 Windows,但对任何操作系统的答案都很感兴趣。

我正在编写一个程序,该程序对存储在多个磁盘上的大量文件进行哈希处理,每个磁盘都分为多个分区。例如,Disk #1 有分区 C、D 和 E,而 Disk #2 有分区 F 和 G,而 Disk #3 有分区 H。

我想通过并行散列文件来节省一些时间:三个磁盘的三个线程或进程,因此 3 个文件同时运行,但每个磁盘只有一个。但是,我不确定如何确定给定文件在哪个物理磁盘上。 (也就是说,在我的代码中。我今天显然可以对其进行硬编码,但我有兴趣使其可重用和通用。)

操作系统是否以我可以访问的方式公开了这些信息?

【问题讨论】:

  • 您可以使用 IOCTL 查询物理磁盘号或 ID,但这需要 PyWin32 或 ctypes。

标签: python windows


【解决方案1】:

您可以使用stat 结果的st_dev 部分来确定目录所在的设备。您正在寻找不同设备上的目录:

import os

print(os.stat('c:\\').st_dev)
print(os.stat('d:\\').st_dev)

【讨论】:

  • 这似乎并不表示不同的设备。我刚刚对 SD 卡进行了分区,创建了 V 和 W 分区,它们有两个不同的 st_dev 值。
  • Python 3 使用 st_dev 的卷序列号 (VSN),它来自安装在卷上的文件系统——不是来自物理磁盘设备,甚至不是直接来自卷设备本身(通常是磁盘上的一个分区)。
  • 请注意,Python 将 VSN 用于 st_dev 是一件值得怀疑的事情,因为 Windows 不保证 VSN 在系统中是唯一的甚至非零,但 Unix st_dev需要唯一性。例如,对于 Windows 中的 WebDAV 共享,VSN 始终为 0。相比之下,Linux 中的 WebDAV 挂载具有为给定挂载实例唯一生成的 st_dev
  • 嗯,很遗憾,很抱歉 - 那么您似乎需要为各种操作系统实现操作系统 API 特定的解决方案。我知道如何从 C# 中做到这一点,因此从 Python 中使用 Win32 可能有一个相当简单的翻译,但显然这只是 Windows。 (或者你在寻找已经写过这个库的其他人时会很幸运......)
猜你喜欢
  • 1970-01-01
  • 2012-07-13
  • 2011-08-22
  • 2012-08-23
  • 2019-08-09
  • 1970-01-01
  • 2021-11-05
  • 2020-10-31
  • 1970-01-01
相关资源
最近更新 更多