search所有驱动器的文件

我有一个文件的名称,我想在任何驱动器上find它。 我可以使用recursionsearch,但我需要一个根目录开始。 对于大多数计算机,根是“C:\”。 但是有一些已经改变了这封信,或者有一些不止一封(如C,D …)。

所以,我需要find一种方法来了解计算机中的所有驱动器,以便能够search每一个驱动器。 我需要find没有用户input编程的字母。

我知道我可以使用“diskpart”,但它需要pipe理员访问权限,我的代码不会有。 还有“wmic”,但我不知道计算机是否在PATH中有正确的文件夹。

所以,问题是如何在计算机中进行recursionsearch,我不知道驱动器的字母或者有多less个? 还是有另一种方法来查找计算机中的文件的path

我有一个解决方案,要求您以管理员身份运行,但不要求您安装任何其他工具。 然后,我有一个可选的,凌乱的解决方案,即使没有这些特权,也可以运行。 我将从更清洁的一个开始。

这个脚本会找到你的驱动器:

 import subprocess driveStr = subprocess.check_output("fsutil fsinfo drives") driveStr = driveStr.strip().lstrip('Drives: ') drives = driveStr.split() 

基本上, fsutil fsinfo drives是一个命令行命令,将返回您的计算机上的现有驱动器的字母。 所以你可以用check_output得到结果,然后check_output不需要的字符,因为它会返回一个字符串,如'\r\nDrives: C:\\ D:\\ \r\n' 。 然后你可以拆分清单,你将得到一个这样的驱动器列表:

 ['C:\\', 'D:\\'] 

然后你可以遍历这些驱动器递归搜索一个文件。

 import os def find_file(target, folder): for f in os.listdir(folder): path = os.path.join(folder, f) if os.path.isdir(path): result = find_file(target, path) if result is not None: return result continue if f == target: return path 

这个函数将基本上遍历它提供的文件夹中的每个文件,它首先检查文件是否是一个包含isdir的文件夹,并在它找到的任何文件夹上递归运行。 如果不是文件夹,它将检查名为target的文件,并在找到时返回它的路径。 你可以很简单地将这两部分结合起来:

 for drive in drives: filepath = find_file(target, drive) if filepath is not None: break 

但是,如果您无法以管理员身份运行,则还有另一种方式不尽如人意。 基本上,你可以循环所有可能的驱动器名称,并检查它们是否存在,如下所示:

 drives = ['{}:\\' for letter in 'CDEFGHIJKLMNOPQRSTUVWXYZ'] for drive in drives: if os.path.isdir(drive): filepath = find_file(target, drive) if filepath is not None: break 

这将检查每个驱动器是否作为目录存在,并搜索每个驱动器。 请注意,这将包括网络路径,我相信USB /外部硬盘驱动器,而替代方法则不。

如果我理解正确,你知道文件的名称。

使用os.path.abspath('myfile.txt')应该返回完整的路径。

之后,您可以使用os.path.dirname来获取目录。

根据文档os.path应该是跨平台的: https : //docs.python.org/3/library/os.path.html#module-os.path但我没有在Windows上尝试过。