2010-10-08 208 views
2

在刪除重複行的同時,將文件列表和輸出文件的名稱合併爲單個文件的最快捷方式是什麼? 類似於什麼是簡單合併文件的最快捷方式,什麼是分割數組的最快捷方式?

cat file1 file2 file3 | sort -u> out.file

in python。

寧願不使用系統調用。

AND:

什麼是在Python到X塊(名單列表)拆分列表儘可能相等,最快捷的方式? (給定一個列表和X.)

+0

大塊應保持在原來的列表中的順序。這裏的平等是指大小。所以對於X = 2,LIST =(x1,x2,x3,x4)被分成((x1,x2),(x3,x4))。 – cokacola 2010-10-08 19:28:03

+0

最快,你的意思是寫的最快還是最快?另外,你是否想要保留行順序? – JoshD 2010-10-08 19:30:06

+3

你應該把這個問題分成兩部分 - 你所要求的東西不相互關聯,需要分開。 – 2010-10-08 19:36:11

回答

-1

對於第一:

lines = [] 
for filename in filenames: 
    f = open(filename) 
    lines.extend(f.read().split('\n') 
    f.close() 
lines = list(set(lines)) #remove duplicates 
f = open(outfile_name, 'w') 
f.write(''.join(lines)) 

假設文件是​​一個合理的長度,因爲所有從文件中的數據將被同時存儲在存儲器中。如果要保留排序行sort的副作用,則只需在寫入文件之前添加lines.sort()即可。

而第二個:

step_size = len(orig_list)/num_chunks 
split_list = [orig_list[i:i+step_size] for i in range(0, len(orig_list), step_size)] 
2

第一:

lines = set() 
for filename in filenames: 
    with open(filename) as inF: 
     lines.update(inF) 
with open(outfile, 'w') as outF: 
    outF.write(''.join(lines)) 

二:

def chunk(bigList, x): 
    chunklen = len(bigList)/x 
    for i in xrange(0, len(bigList), chunklen): 
     yield bigList[i:i+chunklen] 

listOfLists = list(chunk(bigList, x)) 
相關問題