如何用PowerShell正确拆分含多行文本的CSV为纯文本文件?
正确拆分CSV为单个文本文件的PowerShell解决方案
问题根源
你原脚本的核心问题是用Get-Content按纯文本行读取CSV,无法识别CSV规范中引号包裹的多行字段——示例里的Respuesta字段包含换行,原脚本会把这些换行当成独立的CSV行,导致拆分逻辑彻底混乱,生成大量空文件或错误拆分的文件。
正确脚本
用PowerShell专门的CSV处理cmdlet Import-Csv,它会严格按照CSV规范解析每一行数据,自动处理多行字段:
# 读取CSV文件,指定UTF-8编码确保西班牙语特殊字符正确解析 $csvData = Import-Csv -Path 'csv-full.csv' -Encoding utf8 # 输出文件前缀 $outputPrefix = 'output_done_' # 遍历每一行CSV数据 foreach ($index in 0..($csvData.Count - 1)) { $currentRow = $csvData[$index] $fileNumber = $index + 1 # 文件编号从1开始递增 $outputFilePath = "$outputPrefix$fileNumber.txt" # 组合输出内容:可根据需求调整,比如只保留Respuesta字段 $fileContent = @" $($currentRow.Pregunta) $($currentRow.Respuesta) "@ # 写入文件,指定UTF-8编码确保特殊字符保留 $fileContent | Out-File -Path $outputFilePath -Encoding utf8 -Force Write-Host "已生成文件: $outputFilePath" }
关键说明
- CSV解析:
Import-Csv会自动识别引号包裹的多行字段,不会把字段内的换行当成新行,保证每个CSV行对应一条完整数据。 - 编码处理:读取和写入都指定
-Encoding utf8,确保西班牙语的重音字符(áéíóúñ)、特殊符号(¿)正确读写,不会出现乱码。 - 内容自定义:如果只需要输出
Respuesta字段的内容,直接把$fileContent改成$currentRow.Respuesta即可。
内容的提问来源于stack exchange,提问作者eera5607
相关产品推荐
相关产品推荐

