1つのCSV形式のファイルを2つのCSVファイルに分割する

11828 ワード

序文
本プロジェクトでは、1つのcsvファイルを比例して2つのcsvファイルに分割できます.効果は、C:algo_fileフォルダの下で、そのフォルダの下のdataをcsvファイルはtrainに分かれている.csvとvali.csv
完全なコード
split_の定義csv関数:
import csv
import os


def split_csv(path, total_len, per):

    #   train.csv vali.csv     
    if os.path.exists('C:\\algo_file\\train.csv'):
        os.remove('C:\\algo_file\\train.csv')
    if os.path.exists('C:\\algo_file\\vali.csv'):
        os.remove('C:\\algo_file\\vali.csv')

    with open(path, 'r', newline='') as file:
        csvreader = csv.reader(file)
        i = 0
        for row in csvreader:

            if i < round(total_len * per/100):
                # train.csv    
                csv_path = os.path.join("C:\\algo_file", 'train.csv')
                print(csv_path)
                #          ,   
                if not os.path.exists(csv_path):
                    with open(csv_path, 'w', newline='') as file:
                        csvwriter = csv.writer(file)
                        csvwriter.writerow(row)
                    i += 1
                #            
                else:
                    with open(csv_path, 'a', newline='') as file:
                        csvwriter = csv.writer(file)
                        csvwriter.writerow(row)
                    i += 1
            elif (i >= round(total_len * per/100)) and (i < total_len):
            	# vali.csv    
                csv_path = os.path.join("C:\\algo_file", 'vali.csv')
                print(csv_path)
                #          ,   
                if not os.path.exists(csv_path):
                    with open(csv_path, 'w', newline='') as file:
                        csvwriter = csv.writer(file)
                        csvwriter.writerow(row)
                    i += 1
                #            
                else:
                    with open(csv_path, 'a', newline='') as file:
                        csvwriter = csv.writer(file)
                        csvwriter.writerow(row)
                    i += 1
            else:
                break

    print("           ")
    return

上記の関数を呼び出します.
if __name__ == '__main__':

    path = 'C:\\algo_file\\data.csv'
    total_len = len(open(path, 'r').readlines())# csv    
    per = 80 #     %

    split_csv(path, total_len, per)

トレーニングセットが80%(検証セット20%)を占める割合で、C:algo_fileフォルダの下のdata.csvは分割する、このファイルの下でtrainを得る.csvとvali.csv.
最後に
本プロジェクトはC:algo_fileフォルダを例にとると、実際にはdata.csvの経路、train.csvが存在する経路、vali.csvが存在するパスは、ファイル名を含めて変更できます.