2016-10-21 17 views
1

説明最初の行を維持したまま:分割.CSV私はこのコードを持っている

#!/usr/bin/env python 

# Import module 
import os 

# Define file_splitter function 
def file_splitter(fullfilepath, lines=50): 
    """Splits a plain text file based on line count.""" 
    path, filename = os.path.split(fullfilepath) 
    basename, ext = os.path.splitext(filename) 

# Open source text file 
    with open(fullfilepath, 'r') as f_in: 
     try: 
     # Open first output file 
      f_output = os.path.join(path, '{}_{}{}'.format(basename, 0, ext)) 
      f_out = open(f_output, 'w') 

     # Read input file one line at a time 
     for i, line in enumerate(f_in): 
     # When current line can be divided by the line 
     # count close the output file and open the next one 
      if i % lines == 0: 
       f_out.close() 
       f_output = os.path.join(path, '{}_{}{}'.format(basename, i, ext)) 
       f_out = open(f_output, 'w') 

      # Write current line to output file 
      f_out.write(line) 

     finally: 
     # Close last output file 
      f_out.close() 

# Call function with source text file and line count 
file_splitter('Products_con_almacen_stock.csv', 12000) 

これは120.000行のチャンクにファイルを分割Products_con_almacen_stock.csv

すべてのチャンクには列と行がありますが、ヘッダーはありません。最初のチャンクのみがあります。すべてのチャンクの最初の記述行を保持したいと思います。

これは可能ですか?

ありがとうございます!

+3

[内蔵CSVモジュール](https://docs.python.org/2/library/csv.html#csv.DictReader)を代わりにご利用ください。 – Owen

答えて

2

あなたはこのような何かを行うことができ:

first = True 
for line in lines: 
    if first: 
     header = line 
     first = False 
    .... 

あなたはその後、後続のすべてのファイルのヘッダを使用することができます。

+0

こんにちは、ありがとうございます。file_splitterで 行目の行: TypeError: 'int'オブジェクトは反復可能ではありません – NeoVe

+0

あなたのニーズに合わせてレシピを調整する必要があります。キーは、あなたが最初の行を見ているかどうかを知るフラグを持ち、この最初の行を将来の使用のために保持することです。 –

+0

クールで働いています♪ – NeoVe

関連する問題