PowerShell批量转TXT为CSV:避免acct列转为科学计数法
解决方案
修改PowerShell脚本实现acct列添加单引号
你之前的问题出在单独提取acct列修改后,没把修改后的值写回原数据对象,直接导出就只会输出数组的Length属性。下面是修正后的脚本,能保留所有原表头和列,只修改acct列:
$path = "C:\Test\*.txt" $files = Get-ChildItem $path | Where-Object { !$_.PSIsContainer } foreach ($file in $files) { $newFileName = $file.FullName -Replace "\.txt$", ".csv" # 导入TXT里的CSV数据 $csvData = Import-Csv $file.FullName # 遍历每一行,给acct字段加单引号前缀 foreach ($row in $csvData) { $row.acct = "'$($row.acct)" } # 导出修改后的CSV,指定UTF8编码避免乱码 $csvData | Export-Csv $newFileName -NoTypeInformation -Encoding UTF8 }
重点说明:
- 用
foreach ($row in $csvData)遍历每一行数据,直接修改对象的acct属性,这样所有原有列和表头都会保留,只修改目标列。 - 替换文件名时用
"\.txt$"正则,避免误改文件名里包含.txt的其他文件(比如test.txt.bak)。 - 加
-Encoding UTF8是为了避免部分情况下Excel读取CSV时出现乱码。
其他避免科学计数法的办法
如果不想加单引号,还有这两种可选方案:
- 制表符前缀法:把
$row.acct = "'$($row.acct)"改成$row.acct = "t$($row.acct)"`,Excel打开时会把带制表符前缀的内容识别为文本,不会转成科学计数法,但单元格前会有个制表符,适合不需要单引号的场景。 - Excel导入手动设置:如果是手动用Excel打开CSV,在导入向导里选
acct列,把数据类型改成「文本」就行,但这个方法没法批量处理,适合少量文件的情况。
效果验证
原数据行:
data_id,place,placepool_id,acct,sec_acct,ter_acct,source_acct,product_id
123A0001234567,00,12345,1234567890123456,9876543210123456,,,123,
修改后导出的CSV里,acct列会变成'1234567890123456,Excel打开时会直接识别为文本,不会显示成1.23457E+15这种科学计数法格式。
内容的提问来源于stack exchange,提问作者InquisitorLu
相关产品推荐
相关产品推荐

