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 のいくつかのメソッドを使用して独自の関数を簡単に作成できます

Python 3.0を想定

os.walk

Python 2.7を想定

os.path.walk

基本的に、os.path.split() を使用して与えられたパスを分割し、次に walk メソッドを head で使用して、tail が結果に含まれているかどうかを確認できます。見つかった場合は、テールで os.path.abspath を実行して、そのファイルの 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

私はそれが動作するはずだと思います

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

この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 に答える