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

如何使用PowerShell将多个.txt文件合并为多列.csv文件

多个ASD文本文件合并为CSV(保留波长列,多文件数据列并列)

我需要把多个包含数据的.txt文件合并成一个.csv文件,要求每个.txt文件的内容单独列为一列。目前我的代码如下:

$location = (Get-Location).Path
$files = Get-ChildItem $location -Filter "*.asd.txt"
$data = @()

foreach ($file in $files) {
    $fileData = Get-Content $file.FullName

    foreach ($line in $fileData) {
        $lineData = $line -split "\t"
        $data = $lineData[1]
        Add-Content -Path "$location\output.csv" -Value  $data
    } 
}

每个.txt文件的格式是第一列为"Wavelength",第二列为对应数值。我希望保留"Wavelength"列,将所有文件的第二列并列展示,表头使用对应文件的完整名称(例如"stovikmladyDoupno2 2020080500001.asd")。我已经找资料折腾两天了,试过在文件末尾加逗号但没用。

以下是部分样例数据:

Wavelength  stovikmladyDoupno2 2020080500000.asd
350  6.38961399706465E-02 
351  6.14107911262903E-02 
352  6.04866108251357E-02 
353  5.83485359067184E-02 
354  0.054978792413247 
355  5.27014859356317E-02 
356  5.34849237528764E-02 
357  5.32841277775603E-02 
358  5.23466655229364E-02 
359  5.47595002186027E-02 
360  5.22061034631109E-02 
361  4.90149806042666E-02 
362  4.81633530421385E-02 
363  4.83974076557941E-02 
364  4.65219929658367E-02 
365  0.044800930294557 
366  4.47830287392802E-02 
367  4.46947539436297E-02 
368  0.043756926558447 
369  4.31725380363072E-02 
370  4.36867609723618E-02 
371  4.33227601805265E-02 
372  4.29978664449687E-02 
373  4.23860463187361E-02 
374  4.12183604375401E-02 
375  4.14306521081773E-02 
376  4.11760903772502E-02 
377  4.06421127128478E-02 
378  4.09771489689262E-02 
379  4.10083126746385E-02 
380  4.05161601354181E-02 
381  3.97904564387456E-02 

解决方案

核心思路是把每个文件的数据转换成以波长为键的哈希表,合并所有哈希表后导出为CSV。代码如下:

$location = (Get-Location).Path
$files = Get-ChildItem $location -Filter "*.asd.txt"

# 初始化哈希表存储合并数据,键为Wavelength
$mergedData = @{}

foreach ($file in $files) {
    # 提取文件名(去掉.txt后缀)作为CSV列名
    $columnName = $file.Name -replace '\.txt$', ''
    # 读取文件内容,过滤空行
    $fileContent = Get-Content $file.FullName | Where-Object { $_ -match '\S' }
    
    foreach ($line in $fileContent) {
        # 用任意空白符分割行,兼容制表符/多空格分隔
        $parts = $line -split '\s+', 2 | Where-Object { $_ }
        if ($parts.Count -ne 2) { continue }
        
        $wavelength = $parts[0].Trim()
        $value = $parts[1].Trim()
        
        # 跳过表头行
        if ($wavelength -eq 'Wavelength') { continue }
        
        # 若波长未在哈希表中,新建条目
        if (-not $mergedData.ContainsKey($wavelength)) {
            $mergedData[$wavelength] = [PSCustomObject]@{
                Wavelength = $wavelength
            }
        }
        # 添加当前文件的数值列
        $mergedData[$wavelength] | Add-Member -MemberType NoteProperty -Name $columnName -Value $value -Force
    }
}

# 按波长排序后导出CSV
$mergedData.Values | Sort-Object { [double]$_.Wavelength } | Export-Csv -Path "$location\output.csv" -NoTypeInformation -Encoding UTF8

代码说明:

  1. 文件读取与列名提取:遍历目标文件,自动提取文件名作为CSV的列标题。
  2. 数据分割处理:用\s+分割行内容,兼容样例中的空格分隔和标准制表符分隔,过滤无效行。
  3. 数据合并:通过哈希表确保每个波长只保留一条记录,逐步添加各文件的数值列。
  4. 导出CSV:将合并后的对象按波长排序,导出为规范的CSV文件,自动处理表头对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:55:22