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

基于计数CSV生成重复数值CSV的PowerShell解决方案求助

PowerShell 实现计数型CSV展开为重复数值行

需求场景

将每行格式为数值,重复次数的CSV文件,转换为每行仅包含单个数值、且数值重复对应次数的CSV文件(例如输入100,3输出3行100),解决Excel宏处理百万级记录时的崩溃问题。

高效处理脚本

以下脚本采用逐行读取+原生.NET方法优化,内存占用极低,适合大规模数据处理:

# 替换为实际的输入、输出文件路径
$inputCsv = "C:\data\input_counts.csv"
$outputCsv = "C:\data\output_expanded.csv"

# 读取输入文件,跳过表头(如果有表头则保留此行,无则删除Select-Object -Skip 1)
Get-Content $inputCsv -Encoding utf8 | Select-Object -Skip 1 | ForEach-Object {
    # 分割数值与计数,限制分割次数避免数值含逗号的情况
    $splitLine = $_ -split ',', 2
    if ($splitLine.Count -ne 2) {
        Write-Warning "格式错误,跳过行: $_"
        return
    }
    
    $value = $splitLine[0].Trim()
    $countStr = $splitLine[1].Trim()
    
    # 验证计数为有效正整数
    if (-not [int]::TryParse($countStr, [ref]$count) -or $count -lt 1) {
        Write-Warning "无效计数,跳过行: $_"
        return
    }
    
    # 一次性生成所有重复行(比PowerShell循环高效数倍)
    [System.Linq.Enumerable]::Repeat($value, $count) -join "`n"
} | Out-File $outputCsv -Encoding utf8

关键优化说明

  1. 低内存占用:Get-Content逐行读取文件,不会将整个百万级数据集加载到内存
  2. 高效生成重复行:使用.NET的Enumerable.Repeat方法批量生成重复内容,避免PowerShell原生循环的性能损耗
  3. 格式容错:包含基础的格式校验,跳过无效行并输出警告

可选调整

  • 如果输入文件没有表头,删除Select-Object -Skip 1语句
  • 若数值或计数包含空格,Trim()方法可去除多余空格,无需保留可删除
  • 如需输出标准CSV格式(带表头),可在脚本开头添加"Value" | Out-File $outputCsv -Encoding utf8,并将$value改为"$value"确保输出为带引号的合规格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:12:41