【问题标题】:How can I find path to given file?如何找到给定文件的路径?
【发布时间】:2009-07-14 11:30:36
【问题描述】:

我有一个文件,例如“something.exe”,我想找到该文件的路径
我如何在 python 中做到这一点?

【问题讨论】:

    标签: python


    【解决方案1】:

    也许os.path.abspath() 会这样做:

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

    如果您的something.exe 不在当前目录中,您可以传递任何相对路径,abspath() 将解决它。

    【讨论】:

      【解决方案2】:

      使用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】:

        如果你完全不知道它在哪里,唯一的办法就是从根目录 c:\

        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】:

          顺便提一下,实现此任务的另一个选项可能是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”字符。

          我用 spyder 中的%timeit 魔法对其进行了测试,性能比os.walk() 选项慢了0.3 秒。

          我注意到您在 Windows 中,因此您可以在 Unix 中搜索行为类似于 find 的命令。

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

          【讨论】:

            【解决方案5】:

            呃……这个问题有点不清楚。

            “拥有”是什么意思?你有文件名吗?你打开了吗?它是一个文件对象吗?它是文件描述符吗?什么???

            如果是名称,“查找”是什么意思?你想在一堆目录中搜索文件吗?或者你知道它在哪个目录?

            如果它是一个文件对象,那么你一定已经合理地打开了它,然后你已经知道了路径,尽管你也可以从 fileob.name 中获取文件名。

            【讨论】:

              【解决方案6】:

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

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

              示例用法如下:

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

              然后你会在结果变量中得到一个匹配列表。

              【讨论】:

                猜你喜欢
                • 2021-10-27
                • 2019-09-30
                • 2016-08-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-12-19
                • 1970-01-01
                相关资源
                最近更新 更多