代码之家  ›  专栏  ›  技术社区  ›  Nik

如何找到给定文件的路径?

  •  5
  • Nik  · 技术社区  · 16 年前

    我有一个文件,例如“something.exe”,我想找到这个文件的路径
    我怎么能用python做这个?

    5 回复  |  直到 6 年前
        1
  •  12
  •   Greg Hewgill    16 年前

    也许 os.path.abspath()

    import os
    print os.path.abspath("something.exe")
    

    如果你的 something.exe abspath() 会解决的。

        2
  •  11
  •   sunqiang    16 年前

    os.path.abspath 获取路径名的规范化绝对版本
    使用 os.walk 找到它的位置

    import os
    exe = 'something.exe'
    #if the exe just in current dir
    print os.path.abspath(exe)
    # output
    # D:\python\note\something.exe
    
    #if we need find it first
    for root, dirs, files in os.walk(r'D:\python'):
        for name in files:
            if name == exe:
                print os.path.abspath(os.path.join(root, name))
    
    # output
    # D:\python\note\something.exe
    
        3
  •  5
  •   ghostdog74    16 年前

    import os
    for r,d,f in os.walk("c:\\"):
        for files in f:
             if files == "something.exe":
                  print os.path.join(r,files)
    

    否则,如果您知道只有很少的地方可以存储您的exe,比如system32,那么就从那里开始查找它。如果总是将.exe放在PATH变量中的某个目录中,也可以使用os.environ[“PATH”]。

    for p in  os.environ["PATH"].split(";"):
        for r,d,f in os.walk(p):
            for files in f:
                 if files == "something.exe":
                     print os.path.join(r,files)
    
        4
  •  2
  •   Lennart Regebro    16 年前

    休斯敦大学。。。这个问题有点不清楚。

    如果是名字,你说的“找到”是什么意思?要在一堆目录中搜索文件吗?或者你知道它在哪个目录下?

        5
  •  1
  •   lenz    6 年前

    只是说,完成这项任务的另一个选择可能是 subprocess 模块,帮助我们在终端中执行命令,如下所示:

    import subprocess
    
    command = "find"
    directory = "/Possible/path/"
    flag = "-iname"
    file = "something.foo"
    args = [command, directory, flag, file]
    process = subprocess.run(args, stdout=subprocess.PIPE)
    path = process.stdout.decode().strip("\n")
    print(path)
    

    通过此操作,我们模拟将以下命令传递给终端: find /Posible/path -iname "something.foo" 之后,考虑到 stdout 是二进制字符串,我们需要对其进行解码,并删除后面的“\n”字符。

    %timeit spyder中的魔法,性能比 os.walk() 选择。

    find 在Unix中。

    最后,如果在不同的目录中有多个同名文件,则生成的字符串将包含所有这些文件。因此,您需要适当地处理这个问题,可能需要使用正则表达式。

        6
  •  0
  •   bduhbya    5 年前

    这真是老生常谈,但可能对偶然发现这一点的人有用。在python 3中,有一个名为“glob”的模块,它接受“egrep”样式的搜索字符串并返回系统适当的路径(即Unix\Linux和Windows)。

    https://docs.python.org/3/library/glob.html

    示例用法如下:

    results = glob.glob('./**/FILE_NAME')
    

    然后在结果变量中得到匹配项的列表。