我有一个文件,例如“something.exe”,我想找到这个文件的路径。
在Python中我该怎么做?
也许os.path.abspath()
可以解决这个问题:
import os
print os.path.abspath("something.exe")
如果你的 `something.exe` 不在当前目录,你可以传递任何相对路径,`abspath()` 将解析它。使用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
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目录,则可以从那里开始查找。您还可以利用os.environ["PATH"],如果您总是将.exe文件放在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)
只是提一下,实现这个任务的另一个选项可能是使用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
魔法测试了它,性能比os.walk()
选项慢了0.3秒。find
命令的命令。这是一个非常老的帖子,但对于那些偶然发现它的人可能会很有用。在Python 3中,有一个名为“glob”的模块,它采用“egrep”样式的搜索字符串并返回适合系统的路径(即Unix \ Linux和Windows)。
https://docs.python.org/3/library/glob.html
一个例子的用法是:
results = glob.glob('./**/FILE_NAME')
嗯...这个问题有点不清楚。
你说的“有”是什么意思?你有文件的名称吗?你打开了它吗?它是一个文件对象吗?还是一个文件描述符?什么?
如果它是一个名称,那么“找到”是什么意思?你想在一堆目录中搜索文件吗?还是你知道它在哪个目录中?
如果它是一个文件对象,那么你必须已经合理地打开了它,然后你已经知道路径了,虽然你也可以从fileob.name中获取文件名。