2014-06-27 35 views
0

我正在尋找一種解決方案,可以在Python中以循環方式將生成的文件寫入一組目標目錄,以便文件均勻分佈。以循環模式將文件寫入目錄

因此,如果有5個目標目錄:D1,D2,D3,D4和D5

和生成的文件的恆定流(F1 .... FN),則目錄將被寫入到如下: -

D1: F1, F6, F11 ... etc 
D2: F2, F7, F12 ... etc 
D3: F3, F8, F13 ... etc 
D4: F4, F9, F14 ... etc 
D5: F5, F10, F15 ... etc 

理想的情況下有可能是蟒蛇LIB在那裏,讓這...

感謝

回答

3

使用itertools.cycle以獲取下一個目錄下一個文件:

it = itertools.cycle(['D1', 'D2', 'D3']) 

print next(it) 
print next(it) 
print next(it) 
print next(it) 
print next(it) 
print next(it) 

結果

D1 
D2 
D3 
D1 
D2 
D3 

it = itertools.cycle(['D1', 'D2', 'D3']) 

for x in ['F1', 'F2', 'F3', 'F4' , 'F5', 'F6']:      
    print x, 'write in', next(it) 

結果

F1 write in D1 
F2 write in D2 
F3 write in D3 
F4 write in D1 
F5 write in D2 
F6 write in D3 

編輯:作爲凱文說

dirs = ['D1', 'D2', 'D3'] 
files = ['F1', 'F2', 'F3', 'F4' , 'F5', 'F6'] 

for f,d in zip(files, itertools.cycle(dirs)): 
    print f, 'write in', d 

結果

F1 write in D1 
F2 write in D2 
F3 write in D3 
F4 write in D1 
F5 write in D2 
F6 write in D3 
+0

我從來沒有聽說過itertools,但我是哈斯克爾的巨大粉絲。多麼酷的圖書館。 – Dan

+1

「循環」似乎是一個好主意。如果你的文件名是zip,目錄是zip(文件名,itertools.cycle(目錄)):'?那麼你不必手動做'下一個'。 – Kevin

+0

@Kevin你是對的:) – furas

1

你只需要一種方法來引用相應的目錄當前文件。既然你有索引兩個不相等的長名單,拉鍊是不是真的適合這裏(這是一個遺憾),但你可以實現它,像這樣:

files = ... 
directories = ... 

for i in range(len(files)): 
    write_file(files[i], directories[i % len(directories)]) 

您可以在此使用cycle建議從furas提高,它允許zip:

from itertools import cycle 

for f, d in zip(files, cycle(directories)): 
    write_file(f, d)