2010-08-09 3 views
1

목록에서 파일 경로를 만들고 싶습니다.목록에서 경로 파일 이름을 만듭니다.

pathList = [['~/workspace'], ['test'], ['*'], ['*A', '*2'], ['*Z?', '*1??'], ['*'], ['*'], ['*'], ['*.*']] 

나는

[['', '~/workspace', 'test', '*', '*A', '*Z?', '*', '*', '*', '*.*']] 

[['', '~/workspace', 'test', '*', '*A', '*1??', '*', '*', '*', '*.*']] 

[['', '~/workspace', 'test', '*', '*2', '*Z?', '*', '*', '*', '*.*']] 

[['', '~/workspace', 'test', '*', '*2', '*1??', '*', '*', '*', '*.*']] 

내가 루프에서 그것을 만들려고하지만

[['', '~/workspace', 'test', '*', '*A', '*Z?', '*', '*', '*', '*.*', '*1??', '*', '*', '*', '*.*', '*2', '*Z?', '*', '*', '*', '*.*', '*1??', '*', '*', '*', '*.*']] 

내가 어떻게 할 수있는

을 얻을

줄까? 도와주세요.

감사합니다.

+0

itertools.product를 사용하여 버전입니다, 그것은 작동합니다. 도움 주셔서 대단히 감사합니다. – Walapa

답변

1
파이썬 2.6에서

이상 당신은 itertools.product 사용할 수 있습니다

import itertools 
for x in itertools.product(*pathList): 
    print x 
1

을 내가 질문을 이해 모르겠지만, 난 당신이 itertools.product을 원한다고 생각 :

print(list(itertools.product(*pathList))) 
>>> [('~/workspace', 'test', '*', '*A', '*Z?', '*', '*', '*', '*.*'), 
    ('~/workspace', 'test', '*', '*A', '*1??', '*', '*', '*', '*.*'), 
    ('~/workspace', 'test', '*', '*2', '*Z?', '*', '*', '*', '*.*'), 
    ('~/workspace', 'test', '*', '*2', '*1??', '*', '*', '*', '*.*')] 

이 수율 가능한 모든 경로를 각 중첩 목록에서 하나의 요소를 가져옵니다.

2

다음 단계를 예상하고 - 여기이

>>> import os, itertools 
>>> [os.path.join(*x) for x in itertools.product(*pathList)] 
['~/workspace/test/*/*A/*Z?/*/*/*/*.*', 
'~/workspace/test/*/*A/*1??/*/*/*/*.*', 
'~/workspace/test/*/*2/*Z?/*/*/*/*.*', 
'~/workspace/test/*/*2/*1??/*/*/*/*.*'] 

같은 경로를 만들고하는 itertools.starmap

>>> from itertools import starmap 
>>> starmap(os.path.join, itertools.product(*pathList)) 
<itertools.starmap object at 0xb77d948c> 
>>> list(_) 
['~/workspace/test/*/*A/*Z?/*/*/*/*.*', 
'~/workspace/test/*/*A/*1??/*/*/*/*.*', 
'~/workspace/test/*/*2/*Z?/*/*/*/*.*', 
'~/workspace/test/*/*2/*1??/*/*/*/*.*'] 
관련 문제