pythonwindowspywin32drive

How can I get a list of removable drives plugged in the computer?


I would like to get a list of the removable drivers that are plugged into the computer.

How can I do that with the pywin32 module in Python?

Note: It's important that I will be able to separate the removable drives from the fixed drives.


Solution

  • The algorithm is straightforward:

    This is how it looks in Python (using PyWin32 wrappers). Add any of win32con.DRIVE_* constants to drive_types tuple to get different drive types combinations:

    code00.py:

    #!/usr/bin/env python
    
    import sys
    
    import win32con as wcon
    from win32api import GetLogicalDriveStrings
    from win32file import GetDriveType
    
    
    def get_drives_list(drive_types=(wcon.DRIVE_REMOVABLE,)):
        drives_str = GetLogicalDriveStrings()
        drives = (item for item in drives_str.split("\x00") if item)
        return [item[:2] for item in drives if not drive_types or GetDriveType(item) in drive_types]
    
    
    def main(*argv):
        drive_filters_examples = (
            (None, "All"),
            ((wcon.DRIVE_REMOVABLE,), "Removable"),
            ((wcon.DRIVE_FIXED, wcon.DRIVE_CDROM), "Fixed and CDROM"),
        )
        for drive_types_tuple, display_text in drive_filters_examples:
            drives = get_drives_list(drive_types=drive_types_tuple)
            print("{:s} drives:".format(display_text))
            for drive in drives:
                print("{:s}  ".format(drive), end="")
            print("\n")
    
    
    if __name__ == "__main__":
        print("Python {:s} {:03d}bit on {:s}\n".format(" ".join(elem.strip() for elem in sys.version.split("\n")),
                                                       64 if sys.maxsize > 0x100000000 else 32, sys.platform))
        rc = main(*sys.argv[1:])
        print("\nDone.")
        sys.exit(rc)
    

    Output:

    [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q041465580]> "e:\Work\Dev\VEnvs\py_pc064_03.09_test0\Scripts\python.exe" ./code00.py
    Python 3.9.9 (tags/v3.9.9:ccb0e6a, Nov 15 2021, 18:08:50) [MSC v.1929 64 bit (AMD64)] 064bit on win32
    
    All drives:
    C:  D:  E:  F:  G:  H:  I:  L:  M:  N:
    
    Removable drives:
    H:  I:
    
    Fixed and CDROM drives:
    C:  D:  E:  F:  G:  L:  M:  N:
    
    
    Done.
    

    As a side note, in my environment (at this point):