splitting one csv into multiple files in python

前端 未结 10 2129
执念已碎
执念已碎 2020-12-05 07:28

I have a csv file of about 5000 rows in python i want to split it into five files.

I wrote a code for it but it is not working

import codecs
import c         


        
10条回答
  •  情话喂你
    2020-12-05 07:46

    A python3-friendly solution:

    def split_csv(source_filepath, dest_folder, split_file_prefix,
                    records_per_file):
        """
        Split a source csv into multiple csvs of equal numbers of records,
        except the last file.
    
        Includes the initial header row in each split file.
    
        Split files follow a zero-index sequential naming convention like so:
    
            `{split_file_prefix}_0.csv`
        """
        if records_per_file <= 0:
            raise Exception('records_per_file must be > 0')
    
        with open(source_filepath, 'r') as source:
            reader = csv.reader(source)
            headers = next(reader)
    
            file_idx = 0
            records_exist = True
    
            while records_exist:
    
                i = 0
                target_filename = f'{split_file_prefix}_{file_idx}.csv'
                target_filepath = os.path.join(dest_folder, target_filename)
    
                with open(target_filepath, 'w') as target:
                    writer = csv.writer(target)
    
                    while i < records_per_file:
                        if i == 0:
                            writer.writerow(headers)
    
                        try:
                            writer.writerow(next(reader))
                            i += 1
                        except StopIteration:
                            records_exist = False
                            break
    
                if i == 0:
                    # we only wrote the header, so delete that file
                    os.remove(target_filepath)
    
                file_idx += 1
    

提交回复
热议问题