如何在Python中连接这两个列表以形成路径?

如何在Python中连接这两个列表以形成路径?,python,list,Python,List,我有这样一份清单: remote = ['django', 'django/genelaytics', 'django/genelaytics/manage.py', 'django/genelaytics/rsync/rsync-HEAD-20121003-2147GMT'] for i in remote: os.path.dirname(i) choices = ['django', 'genelaytics', 'manage.py'] 我发现每个列表的父目录都使用for

我有这样一份清单:

remote =  ['django', 'django/genelaytics', 'django/genelaytics/manage.py', 'django/genelaytics/rsync/rsync-HEAD-20121003-2147GMT']
for i in remote:
    os.path.dirname(i)
choices = ['django', 'genelaytics', 'manage.py']
我发现每个列表的父目录都使用for循环,如下所示:

remote =  ['django', 'django/genelaytics', 'django/genelaytics/manage.py', 'django/genelaytics/rsync/rsync-HEAD-20121003-2147GMT']
for i in remote:
    os.path.dirname(i)
choices = ['django', 'genelaytics', 'manage.py']
我从用户选择中获得了另一个列表(仅包括文件名),如下所示:

remote =  ['django', 'django/genelaytics', 'django/genelaytics/manage.py', 'django/genelaytics/rsync/rsync-HEAD-20121003-2147GMT']
for i in remote:
    os.path.dirname(i)
choices = ['django', 'genelaytics', 'manage.py']
要处理这个列表,我需要使用上面提到的
for循环
的父目录。如何使用这两个列表获取每个文件的完整路径并进行处理

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
manage.py的完整路径可以是:django/genelaytics/manage.py,forms.py的完整路径可以是django/genelaytics/forms/forms.py
。它实际上是一个树形结构。另外,
django/genalaytics
是动态生成的,每个用户都不同。因此,它不能是静态的。

您可以使用
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'
这假设
选项
中的元素是安全的(即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']

谢谢你的回答。但是我想得到列表中每个元素的完整路径。使用(*选项)只给出列表中最后一个元素的路径,对每个元素使用切片是不实际的。解决办法可能是什么?再次感谢。所以您正在查找类似于
['django','django/genelaytics','django/genelaytics/manage.py']
?的内容。这就是我要找的。@user1881957:Then
[os.path.join(*choices[:I+1])对于范围内的I(len(choices))]
应该有效。编辑你的答案。这可能对有同样问题的人有帮助。谢谢