Board logo

标题: [问题求助] PowerShell怎样把csv文件平均分成3份? [打印本页]

作者: 小白龙    时间: 2024-10-31 00:59     标题: PowerShell怎样把csv文件平均分成3份?

对chatgpt太失望了, 近百轮下来都搞不定一个平均分割的问题,
我有一个csv文件, 想把它平均分成三份,每份都要有标题头,GPT的代码执行后,每份中的标题头下面的第一行文本都是一样的,
  1. # 设置输入文件路径
  2. $inputFilePath = "A.csv"
  3. # 读取 CSV 文件,使用默认编码(适合 GBK)
  4. $data = Import-Csv -Path $inputFilePath -Encoding Default
  5. # 获取标题头
  6. $header = $data[0]  # 获取标题头
  7. # 获取数据部分
  8. $dataRows = $data[1..($data.Count - 1)]  # 获取数据部分
  9. # 计算总行数
  10. $totalRows = $dataRows.Count
  11. # 动态分割行数
  12. $partSize = [math]::Ceiling($totalRows / 3)
  13. # 分割数据并导出到新的 CSV 文件
  14. for ($i = 0; $i -lt 3; $i++) {
  15.     $startIndex = $i * $partSize
  16.     if ($startIndex -ge $totalRows) { break }  # 如果开始索引超出数据范围,退出循环
  17.     # 计算结束索引,确保不超出数据范围
  18.     $endIndex = [math]::Min($startIndex + $partSize - 1, $totalRows - 1)
  19.     # 提取当前分割的数据
  20.     $currentData = $dataRows[$startIndex..$endIndex]
  21.     # 设置输出文件路径
  22.     $outputFilePath = "A_part$i.csv"
  23.     # 将标题头导出到新的 CSV 文件
  24.     $header | Export-Csv -Path $outputFilePath -NoTypeInformation -Encoding Default
  25.     # 将当前数据导出到同一文件,确保每个文件都包含独立数据
  26.     $currentData | Export-Csv -Path $outputFilePath -NoTypeInformation -Encoding Default -Append
  27. }
复制代码

作者: Five66    时间: 2024-10-31 13:51

啊 ,平均分成3份 ,行数又不一定能整除 ,而且还涉及方向的问题 ,比如
有效行数为10行时 ,按3 ,3 ,4来分还是4 ,4 ,2来分??
有效行数为7行时 ,按2 ,2 ,3来分还是3 ,3 ,1来分??
总之可以试试参考下面的
  1. $file='a.csv'
  2. $str=[string[]](gc $file)
  3. if($str.count -le 3){exit 1}
  4. $o=($str.count-1)%3
  5. if($o -eq 2){
  6. $n=$str.count/3
  7. $o=-1
  8. }else{
  9. $n=($str.count-1-$o)/3
  10. }
  11. $l=0;1..3|foreach{
  12. $startIndex=$l*$n+1
  13. $endIndex=$n*($l+1)
  14. if($_ -eq 3){$endIndex+=$o}
  15. echo "$startIndex ~ $endIndex split"
  16. #($str[($l*$s+1)..($s*($l+1))])
  17. ($str[0],$str[$startIndex..$endIndex])|set-content ($file+"_part$l.csv")
  18. $l++
  19. }
  20. cmd /c pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2