You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell按列值拆分CSV为两个文件的技术问题

解决CSV按指定列拆分为两个文件的PowerShell方案

核心需求

将多个大型CSV文件按Grading Period Title列拆分:

  • 列值为*Overall*的行导出到overall.csv
  • 其余所有行导出到term.csv,保留所有列数据

修正后的高效脚本(适合大型文件)

直接通过筛选而非分组实现,减少内存占用:

# 替换为你的CSV文件所在目录路径
$csvDirectory = "C:\Your\CSV\Folder"
$csvFiles = Get-ChildItem -Path $csvDirectory -Filter "*.csv"

# 遍历每个CSV文件,边处理边导出
foreach ($file in $csvFiles) {
    $csvData = Import-Csv -Path $file.FullName
    
    # 导出*Overall*行到overall.csv,-Append避免覆盖已有内容
    $csvData | Where-Object { $_.'Grading Period Title' -eq '*Overall*' } | 
        Export-Csv -Path "overall.csv" -NoTypeInformation -Append
    
    # 导出其余行到term.csv
    $csvData | Where-Object { $_.'Grading Period Title' -ne '*Overall*' } | 
        Export-Csv -Path "term.csv" -NoTypeInformation -Append
}

原代码问题说明

你之前的Group-Object用法有误:Group-Object没有-eq参数,它的作用是按指定列的所有唯一值分组,这会生成多个分组,不符合你只分两类的需求。直接用Where-Object筛选目标行,逻辑更简洁,处理大型文件时内存效率更高。

可选:用Group-Object实现的方案(不推荐用于超大型文件)

如果一定要基于分组逻辑调整,可参考以下代码,但会额外消耗分组的内存开销:

$csvDirectory = "C:\Your\CSV\Folder"
$csvFiles = Get-ChildItem -Path $csvDirectory -Filter "*.csv"

foreach ($file in $csvFiles) {
    $groups = Import-Csv -Path $file.FullName | Group-Object 'Grading Period Title'
    
    # 提取*Overall*分组并导出
    $overallGroup = $groups | Where-Object { $_.Name -eq '*Overall*' }
    if ($overallGroup) {
        $overallGroup.Group | Export-Csv -Path "overall.csv" -NoTypeInformation -Append
    }
    
    # 合并其余所有分组并导出
    $termGroups = $groups | Where-Object { $_.Name -ne '*Overall*' }
    if ($termGroups) {
        $termGroups | ForEach-Object { $_.Group } | 
            Export-Csv -Path "term.csv" -NoTypeInformation -Append
    }
}

内容的提问来源于stack exchange,提问作者MJB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:25:34