2016-05-04 5 views
1

テキストファイルとファイルの最初の80%をファイルに分割する割合(たとえば80%)を入力する関数を書いて、別の20%を別のファイルに分割する関数を書いた。第1部分は正しいが、第2部分は空である。誰かが見て私の間違いを知らせることができますか?私はこれがあなたの問題であると考えていテキストファイルを2つのファイルに分割する機能

def splitFile(inputFilePatheName, outputFilePathNameFirst, outputFilePathNameRest, splitRatio): 
    lines = 0 
    buffer = bytearray(2048) 
    with open(inputFilePatheName) as f: 
     while f.readinto(buffer) > 0: 
      lines += buffer.count('\n') 

    print lines 
    line80 = int(splitRatio * lines) 
    print line80 
    with open(inputFilePatheName) as originalFile: 
     firstNlines = originalFile.readlines()[0:line80] 
     restOfTheLines=originalFile.readlines()[(line80+1):lines] 

    print len(firstNlines) 
    print len(restOfTheLines) 
    with open(outputFilePathNameFirst, 'w') as outputFileNLines: 
     for item in firstNlines: 
      outputFileNLines.write("{}".format(item)) 

    with open(outputFilePathNameRest,'w') as outputFileRest: 
     for word in restOfTheLines: 
      outputFileRest.write("{}".format(word)) 

答えて

3

:あなたはすでにファイルからすべての行を読んだので

firstNlines = originalFile.readlines()[0:line80] 
restOfTheLines=originalFile.readlines()[(line80+1):lines] 

あなたはreadlinesを(呼び出す場合)は、第2の時間、あなたは、何かを得ることはありません。試してみてください:

allLines = originalFile.readlines() 
firstNLines, restOfTheLines = allLines[:line80], allLines[(line80+1):] 

非常に大きなファイルの場合、ファイル全体をメモリに読み込んでいるという問題があります。

+0

ありがとうございます、私はreadlineSをreadlineのアイデアで使用しました。 \ n大きなファイルのコメントも正しいですが、大きなファイルを扱う方法はわかりません。再度ソリューションをありがとう – Rebin

関連する問題