【问题标题】:Using Python to find drive letter (Windows)使用 Python 查找驱动器号(Windows)
【发布时间】:2022-04-20 19:37:26
【问题描述】:

我正在尝试编写一个 python 脚本(我是新手),它将在 Windows 上每个连接驱动器的根目录中搜索一个密钥文件,然后返回它在将变量设置为驱动器号时所在的驱动器号.

目前我有:

import os
if os.path.exists('A:\\File.ID'):
        USBPATH='A:\\'
        print('USB mounted to', USBPATH)
    if os.path.exists('B:\\File.ID'):
        USBPATH='B:\\'
        print('USB mounted to', USBPATH)
    if os.path.exists('C:\\File.ID'):

-- 然后为每个驱动器号 A 到 Z 重复出现。当然,这将是很多需要输入的内容,我只是想知道是否有一种解决方法可以使我的代码保持整洁和尽可能少(或者这是唯一的方法?)。

此外,如果找不到驱动器(IE 说请插入您的 USB),是否有办法让它打印错误,然后返回开始/循环?类似的东西

print('Please plug in our USB drive')
return-to-start

有点像 GOTO 命令提示符命令?

编辑:

对于未来有类似疑问的人,以下是解决方案:

from string import ascii_uppercase
import os


def FETCH_USBPATH():
    for USBPATH in ascii_uppercase:
         if os.path.exists('%s:\\File.ID' % SVPATH):
            USBPATH='%s:\\' % USBPATH
            print('USB mounted to', USBPATH)
            return USBPATH + ""
    return ""

drive = FETCH_USBPATH()
while drive == "":
    print('Please plug in USB drive and press any key to continue...', end="")
    input()
    drive = FETCH_USBPATH()

此脚本提示用户插入包含“file.id”的驱动器,并在连接时将驱动器号打印到控制台并允许使用“驱动器”作为变量。

【问题讨论】:

    标签: python string python-3.x


    【解决方案1】:

    Python 有一个简单的解决方案。使用 pathlib 模块。

    import pathlib
    drive = pathlib.Path.home().drive
    print(drive)
    

    【讨论】:

      【解决方案2】:

      由于您想反复检查驱动器是否存在,您可能希望将其作为单独的函数移动,像这样

      from string import ascii_uppercase
      from os import path
      
      
      def get_usb_drive():
          for drive in ascii_uppercase:
              if path.exists(path.join(drive, "File.ID")):
                  return drive + ":\\"
          return ""
      

      然后,如果您希望程序反复提示用户插入设备,您可能希望循环运行它,像这样

      drive = get_usb_drive()
      while drive == "":
          print('Please plug in our USB drive and press any key to continue...',end="")
          input()
          drive = get_usb_drive()
      

      最初,我们将尝试使用get_usb_drive() 获取驱动器,如果找不到,它将返回一个空字符串。我们迭代直到get_usb_drive()返回的值是一个空字符串,并提示用户插入设备并等待按键。

      注意:我们使用os.path.join 创建实际的文件系统路径,而不是所有手动字符串连接。

      【讨论】:

      • 有一个注释here,类似的方法(os.path.isdir vs. os.path.exists)可以弹出一个窗口对话框。我的桌面上没有这样的驱动器,所以我无法轻松测试,但可能值得注意。如果没有(或者您没有安装这种类型的驱动器),这种方法非常简洁明了。
      • @jedwards 是的,如果我使用 .bat(如果存在 cmd)搜索驱动器号,我也会收到类似的错误,我的计算机上有一个 SD 卡读卡器,它会吐出一个 '错误”,因为它没有“媒体”——但是 Python 的 os.path.exists 似乎可以很好地处理这个问题。 thefourtheye 我会尽快测试这个命令。谢谢
      • OK 无法让您的代码正常工作,因此我修改并注意 Dan D 的:from string import ascii_uppercase import os def get_usb_drive(): for drive in ascii_uppercase: if os.path.exists('%s:\\File.ID' % drive): drive='%s:\\' % drive print('USB mounted to', drive) return "" drive = get_usb_drive() while drive == "": print('Please plug in our USB drive and press any key to continue...', end="") input() drive = get_usb_drive() 现在问题,即使找到驱动器号,它也会循环。这可能很简单,唉,我是菜鸟
      • 请编辑并在您的问题中包含您尝试过的内容
      • 你应该在 is.path.exists 返回 true 时返回。在我的示例中,有两个返回语句。请检查
      【解决方案3】:

      使用循环并生成路径名:

      import os
      import string
      
      for l in string.ascii_uppercase:
          if os.path.exists('%s:\\File.ID' % l):
              USBPATH='%s:\\' % l
              print('USB mounted to', USBPATH)
              break
      

      【讨论】:

      【解决方案4】:

      最简单的方法是:

      from pathlib import Path
      root = Path(__file__).anchor  # 'C:\' or '\' on unix.
      

      适用于所有系统。 然后你可以这样做:

      some_path = Path(root).joinpath('foo', 'bar')  # C:\foo\bar or \foo\bar on unix.
      

      它在控制台中不起作用,因为使用文件路径。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多