4

次のようなリストがあります。

remote =  ['django', 'django/genelaytics', 'django/genelaytics/manage.py', 'django/genelaytics/rsync/rsync-HEAD-20121003-2147GMT']

次のように for ループを使用して、各リストの親ディレクトリを見つけました。

for i in remote:
    os.path.dirname(i)

次のようなユーザー選択(ファイル名のみを含む)から取得した別のリストがあります。

choices = ['django', 'genelaytics', 'manage.py']

このリストを処理するには、for loop上記の を使用して既に持っている親ディレクトリが必要です。これら 2 つのリストを使用して、このように各ファイルのフル パスを取得し、処理するにはどうすればよいですか?

django/genelaytics

編集:リストは常に最上位の階層から始まるとは限りません。また、最上位の階層が常に同じであるとは限りません。そのため、各ファイルの完全な親ディレクトリを見つけたかったのです。例えば:

    django
    genelaytics
    .project
    .pydevproject
    manage.py
    fileupload
    __init__.py
    __init__.pyc
    form.html~
    form
    forms.py
    forms.pyc
    models.py
    models.pyc

リストには、manage.py と forms.py が含まれる場合があります。The full path for manage.py may be: django/genelaytics/manage.py and for forms.py django/genelaytics/forms/forms.py. 実際にはツリー構造です。またdjango/genalaytics、動的に生成され、ユーザーごとに異なります。したがって、静的にすることはできません。

4

1 に答える 1

5

os.path.joinこれを行うには、引数展開を使用できます。

>>> import os
>>> choices = ['django', 'genelaytics', 'manage.py']
>>> os.path.join(*choices)
'django/genelaytics/manage.py'
>>> os.path.join(*choices[:-1])
'django/genelaytics'

これは、次のようなことが発生する可能性があるため、 の要素choicesが安全 (つまり no ) であると想定しています。../../manage.py

>>> choices = ['django', 'genelaytics', '/etc/passwd']
>>> os.path.join(*choices)
'/etc/passwd'

OPが実際に探していたようです:

>>> [os.path.join(*choices[:i + 1]) for i in range(len(choices))]
['django', 'django/genelaytics', 'django/genelaytics/manage.py']

>>> root = '/test/foo/'
>>> [os.path.join(root, *choices[:i + 1]) for i in range(len(choices))]
['/test/foo/django', '/test/foo/django/genelaytics', '/test/foo/django/genelaytics/manage.py']
于 2012-12-10T05:51:11.813 に答える