2014-10-19 20 views
-1

我已經創建了一個python程序,計算文本文件中的行,然後根據用戶請求的文件數量多少將其拆分成多個文件,但我有一個問題與剩餘的劃分過程中,當用戶要求將文件分割成3個類似文件的腳本創建4個文件,並在第四個文件寫入其餘線路蟒蛇分行文本文件的行提醒

我的代碼:

num_lines = sum(1 for line in open("Perfix/{0}.txt".format(name))) 
size2 = num_lines/progs 
with open('Perfix/{0}.txt'.format(name)) as f: 
    for i, g in enumerate(grouper(size2, f, fillvalue=''), 0): 
     with open('ip{0}_{1}'.format(name,(i+1)), 'w') as fout: 
      fout.writelines(g) 

任何方式我怎麼能解決?

感謝

+0

progs從哪裏來?您提供的代碼是否提供錯誤?請更具體的問題是什麼以及你問什麼 – Parker 2014-10-19 21:04:23

+0

@Parker,這段代碼沒有錯誤,progs是用戶提供的整數。當用戶給出數字3時,剩餘的行在分割行數後正在寫入第四個文件,我希望腳本將它們寫入第三個文件 – 2014-10-19 21:21:01

+1

你能告訴我們什麼是石斑魚功能嗎? – user3885927 2014-10-19 21:23:18

回答

0

如果你想將多餘的線條被寫入到最後一個文件,你的尺寸應該是最後一個不同。一種方法是可以構建一個包含所有文件大小的數組,並且如果有餘數,則將該部分追加到最後一個文件的大小。看起來你的石斑魚是一個自定義函數,用於擴展itertools。我不知道它是什麼,但這裏有一些代碼。我只是從最初的文件中讀取儘可能多的行數:

def fileSplit(name,progs): 
    num_lines = sum(1 for line in open("{0}.txt".format(name))) 
    extra=num_lines%progs #save the remainder length 
    sizes=[num_lines/progs ] * progs 
    sizes[-1]=sizes[-1]+extra #add remainder lines to the length for last file 
    with open('{0}.txt'.format(name)) as f: 
     for i,g in enumerate(sizes): 
      with open('ip{0}_{1}'.format(name,(i+1)), 'w') as fout: 
       #read g lines from f at a time and add them to your new fout 
       fout.writelines([next(f) for x in xrange(g)])