找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 6526|回复: 1

[问题求助] PowerShell怎样把csv文件平均分成3份?

[复制链接]
发表于 2024-10-31 00:59:41 | 显示全部楼层 |阅读模式
对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. }


复制代码
发表于 2024-10-31 13:51:06 | 显示全部楼层
啊 ,平均分成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
复制代码

评分

参与人数 1技术 +1 收起 理由
小白龙 + 1 乐于助人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 20:39 , Processed in 0.018869 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表