PHP拆分大csv文件为多个小文件,并按序号规律命名

PHP拆分大csv文件为多个小文件,并按序号规律命名,用于大csv文件拆分小文件导入

代码说明:

  1. 首先打开A.csv文件,并读取第一行字段。

  2. 然后设置每个文件的最大大小为4MB,并初始化文件大小为0,文件编号为1,文件名为B_1.csv。

  3. 接着打开输出文件B_1.csv,并写入第一行字段。

  4. 循环读取A.csv文件中的数据,计算数据大小,如果文件大小超过最大值,则关闭当前文件,打开新文件,并写入第一行字段。

  5. 最后写入数据,并更新文件大小。

<?php
//设置文件路径
$file_path = 'A.csv';

//打开文件
$file = fopen($file_path, 'r');

//读取第一行字段
$fields = fgetcsv($file);

//设置每个文件的最大大小
$max_size = 4 * 1024 * 1024; //4MB

//初始化文件大小
$file_size = 0;

//初始化文件编号
$file_number = 1;

//初始化文件名
$file_name = 'B_' . $file_number . '.csv';

//打开输出文件
$output_file = fopen($file_name, 'w');

//写入第一行字段
fputcsv($output_file, $fields);

//循环读取数据
while (($data = fgetcsv($file)) !== false) {
    //计算数据大小
    $data_size = strlen(implode(',', $data));
    
    //如果文件大小超过最大值,则关闭当前文件,打开新文件
    if ($file_size + $data_size > $max_size) {
        fclose($output_file);
        $file_number++;
        $file_name = 'B_' . $file_number . '.csv';
        while (file_exists($file_name)) {
            $file_number++;
            $file_name = 'B_' . $file_number . '.csv';
        }
        $output_file = fopen($file_name, 'w');
        fputcsv($output_file, $fields);
        $file_size = 0;
    }
    
    //写入数据
    fputcsv($output_file, $data);
    $file_size += $data_size;
}

//关闭文件
fclose($file);
fclose($output_file);
?>

猜你喜欢

转载自blog.csdn.net/YUJIANYUE/article/details/130773005
今日推荐