我有一个这样的列表:
remote = ['django', 'django/genelaytics', 'django/genelaytics/manage.py', 'django/genelaytics/rsync/rsync-HEAD-20121003-2147GMT']
Run Code Online (Sandbox Code Playgroud)
我发现每个列表的父目录使用for循环如下:
for i in remote:
os.path.dirname(i)
Run Code Online (Sandbox Code Playgroud)
我有另一个列表,我从用户选择中获得(仅包括文件名),如下所示:
choices = ['django', 'genelaytics', 'manage.py']
Run Code Online (Sandbox Code Playgroud)
要处理这个列表,我将需要使用for loop
我上面提到的父目录.如何使用这两个列表来获取每个文件的完整路径并进行处理?
django/genelaytics
Run Code Online (Sandbox Code Playgroud)
编辑:列表可能并不总是从顶层开始.顶层也可能不总是相同.这就是我想找出每个文件的完整父目录的原因.例如:
django
genelaytics
.project
.pydevproject
manage.py
fileupload
__init__.py
__init__.pyc
form.html~
form
forms.py
forms.pyc
models.py
models.pyc
Run Code Online (Sandbox Code Playgroud)
该列表可能包含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
动态生成的,并且对每个用户都不同.所以,它不能是静态的.
你可以使用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'
Run Code Online (Sandbox Code Playgroud)
这假设元素choices
是安全的(即没有../../manage.py
),因为这样的事情可能发生:
>>> choices = ['django', 'genelaytics', '/etc/passwd']
>>> os.path.join(*choices)
'/etc/passwd'
Run Code Online (Sandbox Code Playgroud)
看起来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']
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
136 次 |
最近记录: |