2

我应该得到 dir3 中存在的文件的绝对路径。路径是

"C:\\Workspace\\folder1\\folder2\\file"

我应该提供的唯一输入是文件的名称和 C 驱动器中主要目录的名称,即工作区。

我可以使用python中的任何内置函数获取绝对路径吗?我尝试使用此代码,但它给了我错误的结果:

import os

x='workspace'
y='file_name'
path_1=os.path.abspath("workspace/file_name")
print(path_1)

输出:

C:\Workspace\workspace\file_name
4

3 回答 3

0

我认为它应该与

os.path.abspath("workspace/file_name")

编辑:几秒钟前我在 python 控制台中尝试过:

import os
os.path.abspath("Bachelor/simpleOpenCL.py")
'/home/julius/Bachelor/simpleOpenCL.py'
于 2012-06-29T13:25:41.880 回答
0

内置函数不能那样工作,但是您可以使用 os 中的一些方法轻松地创建自己的函数

假设 python 3.0

os.walk

假设 python 2.7

os.path.walk

基本上,您可以使用 os.path.split() 拆分您给出的路径,然后使用带有头部的 walk 方法并检查尾部是否在结果中。如果找到它,您可以在尾部执行 os.path.abspath 以获取该文件的绝对路径

def locate(headnname):
    abspaths = []
    head,tail = os.path.split(headnname)
    if not os.path.isdir(head):
        raise IOError("not a valid head: %s" % head)
    for dp,dn,fn in os.walk(head):
        if tail in fn:
            abspaths.append(dp+"/"+tail)
    return abspaths

输出:

>>> locate("D:/users/admin/pytools.py")
['D:/users/admin\\Programs\\AT_Plotter\\src/pytools.py',
 'D:/users/admin\\Programs\\py2exe/pytools.py',
 'D:/users/admin\\Programs\\pytools\\src/pytools.py',
 'D:/users/admin\\Shared\\pyIO/pytools.py',
 'D:/users/admin\\Shared\\pyIO\\Old/pytools.py']
于 2012-06-29T13:31:39.153 回答
0

看看这个Active State Recipe

有函数定义来进行递归文件搜索

import os, fnmatch

def locate(pattern, root=os.curdir):
    '''Locate all files matching supplied filename pattern in and below
    supplied root directory.'''
    for path, dirs, files in os.walk(os.path.abspath(root)):
        for filename in fnmatch.filter(files, pattern):
            yield os.path.join(path, filename)

函数使用示例:

for x in locate("*.zip", "C:\\Temp"):
    print x
于 2012-06-29T13:45:31.790 回答