2015-03-13 76 views
1

我正在尝试编写一个python脚本(我是一个新手),它将在Windows上搜索每个连接驱动器的根目录中的密钥文件,然后返回驱动器号它将变量设置为驱动器号。使用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”驱动器插件和连接时,将驱动器盘符打印到控制台并允许使用“驱动器”作为变量。

回答

3

由于要反复检查,如果驱动器存在,您可能需要移动,作为一个独立的功能,这样

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来创建实际的文件系统路径,而不是所有的手动字符串连接。

+1

有一个注释[here](http://stackoverflow.com/a/827398/736937),类似的方法('os.path.isdir' vs'os.path.exists')可以弹出一个窗口对话。我的桌面上没有这样的驱动器,所以我无法轻松测试,但可能值得注意。如果没有(或者你没有安装这种类型的驱动器),这种方法非常干净和直接。 – jedwards 2015-03-13 06:32:46

+0

@jedwards yes如果我用.bat(使用if exists cmd)搜索驱动器号,我也会得到一个类似的错误,我的计算机上有一个SD卡读卡器,并且吐出一个'错误',因为它有'no媒体' - 但是Python的os.path.exists似乎处理得很好。 thefourtheye我会尽快测试这个命令。感谢 – 2015-03-13 09:45:57

+0

OK无法得到您的代码工作,所以我修订,也注意到丹D'S: '从字符串进口ascii_uppercase 进口OS 高清get_usb_drive(): 用于驱动器ascii_uppercase: 如果操作系统。 path.exists('%s:\\ File.ID'%drive:) drive ='%s: () while drive ==“”: print('请插入我们的USB驱动器并按任意键继续...',end =“”) input() drive = get_usb_drive()' 现在问题,即使找到驱动器号,它也会循环。这可能是简单的事,唉,我是一个小老板 – 2015-03-13 10:25:57

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 
+0

谢谢@Dan D结合了这个观点的回复。在这里得到错误,想知道你是否可以提供一些帮助:http://stackoverflow.com/questions/29059399/searching-for-a-usb-in-python-is-returning-there-is-no-disk-in-驱动器 – 2015-03-15 13:10:52

相关问题