在Python中,是否可以确定两个分区是否在同一个磁盘上?

在Python中,是否可以确定两个分区是否在同一个磁盘上?,python,windows,Python,Windows,我现在正在使用Windows,但对任何操作系统的答案都感兴趣 我正在编写一个程序,对存储在多个磁盘上的大量文件进行散列,每个文件被分割成多个分区。例如,磁盘1有分区C、D和E,而磁盘2有分区F和G,磁盘3有分区H 我想通过并行散列文件来节省一些时间:三个线程或进程用于三个磁盘,因此三个文件同时运行,但每个磁盘只运行一个文件。但是,我不确定如何确定给定文件位于哪个物理磁盘上。(也就是说,在我的代码中。我今天显然可以硬编码它,但我对使其可重用和通用感兴趣。) 操作系统是否以我可以访问的方式公开了此信

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

我正在编写一个程序,对存储在多个磁盘上的大量文件进行散列,每个文件被分割成多个分区。例如,磁盘1有分区C、D和E,而磁盘2有分区F和G,磁盘3有分区H

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


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

您可以使用
stat
结果的
st\u dev
部分来确定目录所在的设备。您正在查找不同设备上的目录:

import os

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

您可以使用
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。(或者你在寻找已经编写了库的其他人时很幸运…)这似乎并不表示不同的设备。我只是划分了一个SD卡,创建了V和W分区,它们有两个不同的st_dev值。Python 3使用卷序列号(VSN)对于
st_dev
,它来自安装在卷上的文件系统——不是来自物理磁盘设备,甚至不是直接来自卷设备本身(通常是磁盘上的分区)。请注意,Python将VSN用于
st_dev
是一件值得怀疑的事情,因为Windows无法保证VSN在系统中是唯一的,甚至不为零,但Unix
st_dev
需要唯一性。例如,对于Windows中的WebDAV共享,VSN始终为0。相比之下,Linux中的WebDAV挂载具有唯一性为给定的装载实例生成
st#dev
。嗯,这是不幸的,抱歉-那么您似乎需要为各种操作系统实现特定于操作系统API的解决方案。我知道如何从C#实现这一点,因此可能有一个相当简单的翻译,从Python使用Win32,但显然这只是Windows。(或者你在寻找已经编写了库的其他人时很幸运…)你可以使用IOCTL查询物理磁盘号或ID,但这需要PyWin32或ctypes。你可以使用IOCTL查询物理磁盘号或ID,但这需要PyWin32或ctypes。