gpt4 book ai didi

linux - 如何使用 linux 将大型 csv 拆分为多个小型 csv?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:10 25 4
gpt4 key购买 nike

需要使用 php 和 linux 将大型 csv 文件分成多个文件。

CSV 包含 -

"id","name","address"
"1","abc","this is test address1 which having multiple newline
separators."
"2","abc","this is test address2
which having multiple newline separators"
"3","abc","this is test address3.
which having multiple
newline separators."

我使用了 linux 命令 - split -l 5000 测试文件。

但它无法以正确的格式拆分 csv,因为在 csv 中有一个字段地址具有多个换行符,因此命令从该行拆分文件。

我也尝试过使用 PHP:

$inputFile = 'filename.csv';
$outputFile = "outputfile";
$splitSize = 5000;
$in = fopen($inputFile, 'r'):
$header = fgetcsv($in);
$rowCount = 0;
$fileCount = 1;

while (!feof($in)) {
if (($rowCount % $splitSize) == 0) {
if ($rowCount > 0) {
fclose($out);
}
$filename = $outputFile . $fileCount++;
$out = fopen($filename .'.csv', 'w');
chmod($filename,777);
fputcsv($out, $header);
}
$data = fgetcsv($in);
if ($data) {
fputcsv($out, $data);
$rowCount++;
}
}
fclose($out);

如何解决这个问题?

最佳答案

使用 ruby :

ruby -e 'require "csv"
f = ARGV.shift
CSV.foreach(f).with_index{ |e, i|
File.write("#{f}.#{i}", CSV.generate_line(e, force_quotes: true))
}' file.csv

PHP:

<?php
$inputFile = 'file.csv';
$outputFile = 'file.out';
$splitSize = 1;
if (($in = fopen($inputFile, 'r'))) {
$header = fgetcsv($in);
$rowCount = 0;
$fileCount = 0;
while (($data = fgetcsv($in))) {
if (($rowCount % $splitSize) == 0) {
if ($rowCount > 0) {
fclose($out);
}
$filename = $outputFile . ++$fileCount . '.csv';
$out = fopen($filename, 'w');
chmod($filename, 755);
fputcsv($out, $header);
}
fputcsv($out, $data);
$rowCount++;
}
fclose($out);
}
?>

关于linux - 如何使用 linux 将大型 csv 拆分为多个小型 csv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25241018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com