我有一批文本文件需要转换为csv文件。然而,一旦我打开csv文件,一列中的数据已经转换为科学计数法。我想通过编辑列并在输出到最终csv之前插入撇号来防止这种情况。我在网上找到的大多数建议都涉及首先定义所有列/标题。这种解决方案并不理想,因为不同的文本文件有不同的标题。但是,所有的文件都有一个名为“acct”的列。这是我唯一想编辑的列。
我的脚本用于获取文本并输出到csv:
$path = "C:\Test\*.txt"
$files = Get-ChildItem $path | where { ! $_.PSIsContainer }
foreach ($file in $files){
$newFileName = ($file.Fullname) -Replace ".txt",".csv"
Import-Csv $file.FullName |Export-Csv $newFileName -NoTypeInformation
}
到目前为止,我已经能够像这样编辑列
$acct = (Import-Csv $file).acct
$acct ="'"+ $acct
我正在努力将这些文件组合起来,以便我的输出,$newfilename,将编辑后的值存储在“acct”列中。欢迎任何建议,如果有另一种方法可以转换这些文件并防止数据变成科学记数法,我会全力支持。
当我尝试合并代码时,例如通过管道将$acct传输到export-csv,通常最终得到的输出是一个只有以下内容的csv文件:“Length”“34”EDIT:我正在更新我正在处理的数据样本。原始文件包含167列,我不认为我可以以一种清晰的方式发布在这里。
data_id,place,placepool_id,acct,sec_acct,ter_acct,source_acct,product_id 123A0001234567,00,12345,1234567890123456,9876543210123456,,,123,
123A0001234567,00,12345,1.23457E +15,9.87654E +15,,,123,
我想编辑数据,以防止任何信息被转换为科学计数法。
2条答案
按热度按时间wljmcqd81#
所以你有一个正确的想法,使用名称编辑列。我们只需要按行编辑每个值。谢天谢地,我们还可以得到column names,所以它应该工作,而不必手动输入所有列。我使用@Theo的建议,预先附加“`t”到单元格值,这解决了Excel以科学记数法显示值的问题。
希望这是一个很好的起点。在目前的状态下,它可能不是最有效的。
m2xkgtsf2#
继续我的评论:
Export-Csv
保存更新的数据时,您可以附加开关-UseCulture
,以便使用的delinmiter字符是从设置为本地ListSeparator字符的任何字符中选择的。Excel希望通过双击打开文件时,这样您就不必使用导入向导。(要查看系统中设置的字符,请使用(Get-Culture).TextInfo.ListSeparator
)