我对下面的代码有一些问题。在
from win32 import win32file
drives = []
drivebits=win32file.GetLogicalDrives()
for d in range(1,26):
mask=1 << d
if drivebits & mask:
drname='%c:\\' % chr(ord('A')+d)
t=win32file.GetDriveType(drname)
if t == win32file.DRIVE_REMOVABLE:
drives.append(drname)
print(drives)
1-当您从win32模块使用GetLogicalDrive时,它返回一个整数。可以有人解释原因吗?在
2-为什么循环的范围在1到26之间?在
3-位和的原因是什么?在
谢谢你
win32
模块是一个非常低级的win32api包装器,因此通常您可以查看函数名的Windows文档并获得所需的信息。你可以找到documentation for GetLogicalDrives here.回答您的问题:
整数对应于可用驱动器:每个可用驱动器都有1位。因此,如果没有可用的驱动器,您将得到
0
,假设是一个32位整数)。如果每个驱动器都可用,您将得到0b11111111111111111111111111
(二进制格式)有26个字母,所以它循环26个数字。实际上,你发布的代码只是从1循环到25,我认为这是个bug。它应该是
range(26)
。按位and检查返回整数的各个位。记住,整数的每个位对应一个驱动器号。例如,假设您的C、D和G驱动器可用。您可以像这样可视化返回值,其中第一行是电势驱动器,第二行是二进制中的返回值:
要检查驱动器A是否可用,您需要检查最小位是否为1。检查单个位的方法是使用逐位and。要检查最小位,您需要
drivebits & 1
,要检查驱动器B,您需要检查第二个位:drievebits & (1 << 1)
。要检查C,您需要第三个位:drivebits & (1 << 2)
。等等。在一些示例返回:
如果只有驱动器C可用,
GetLogicalDrives
将返回0b100
(二进制),或4
(十进制)。如果C和D可用,您将得到0b1100
(二进制),或12
(十进制)。在相关问题 更多 >
编程相关推荐