2016-09-22 2 views
0

非常に大きなExcelファイルをダウンサンプリングするコードを書き込もうとしています。最初の4行を正確にコピーし、次に5行目で40行ごとにコピーを開始する必要があります。私は現在、私がここで間違ってやっていることができるもので、このスプレッドシートを1行ずつ読み込み、Excelに書き込もうとする問題(ダウンサンプル)

import os 
import string 
import shutil 
import datetime 

folders = os.listdir('./') 
names = [s for s in folders if "csv" in s] 
zips = [s for s in folders if "zip" in s] 
for folder in names: 
    filename = folder 
    shutil.move(folder, './Archive') 
    with open(filename) as f: 
     counter = 0 
     for line in f: 
      counter += 1 
      f_out = open('./DownSampled/' + folder + '.csv', 'w') 
      if counter < 5: 
       f_out.write(line) 
      elif (counter+35) % 40 == 0: 
       f_out.write(line) 
      f_out.close() 

それは、アーカイブフォルダにファイルを移動しますが、ダウンサンプリングバージョンを作成していない、任意のアイデアがありますか?

+0

元の場所( "ファイル名")で読み込もうとする前にファイルを./Archiveに移動したようです。 –

+0

@ M.Wymannそれを指摘してくれてありがとう! – Citut

答えて

1

前のファイルの各繰り返しでファイルを上書きしています。 forループのうちopen(...)ことを移動します。

with open(filename) as f, open('./DownSampled/' + folder + '.csv', 'w') as f_out: 
    for i, line in enumerate(f): 
     if i < 5: 
      f_out.write(line) 
     elif (i+35) % 40 == 0: 
      f_out.write(line) 

もっとので、enumerateはあなたのカウントロジックを置き換えることができます。

関連する問題