arrays - 通过 pscustomobject 导出 csv,powershell 显示不正确
问题描述
我有以下代码:
function realtest
{
$files = Get-ChildItem -Path 'D:\data\' -Filter *.csv
$tester = [PSCustomObject]@{
foreach ($file in $files)
{
$tempName = $file.BaseName
$temp = Import-Csv $file
$tester | Add-Member -MemberType NoteProperty -Name $tempName -Value $temp.$tempName
}
$tester
$tester | Export-Csv "D:\result.csv" -NoTypeInformation
}
我正在尝试将一堆数据导出到 CSV,但是当它在 csv 上显示数据时,它显示如下
"E0798T102","E0798T103"
"System.Object[]","System.Object[]"
但是当我在控制台上打印它时,它显示如下
E0798T102 E0798T103
--------- ---------
{0, 0, 0, 0...} {0, 0, 0, 0...}
最终,我希望 E0798T102 和 E0798T103 作为 result.csv 中的单独列
只是要注意,我将有 50 个 csv 循环,每个应该显示为自己的列
解决方案
根据您的代码段,这可以大大简化:
function Get-Csv {
$col = foreach ($file in Get-ChildItem -Path D:\data -Filter *.csv) {
$csv = Import-Csv -Path $file.FullName
[pscustomobject]@{
$csv.($file.BaseName) = $csv
}
}
$col | Export-Csv D:\result.csv -NoTypeInformation
return $col
}
但是,csv文件似乎是错误的方法,因为您试图在标题下嵌入对象。这实际上不适用于表格格式,因为您只能获得一层深度。您应该扩展对象上的所有属性,或者使用可以表示深度的不同格式,例如json。
格式化问题的原因是序列化的工作方式。您将获得对象的字符串表示形式。
转换为json并不困难,您只需交易您的Export-Csv
电话:
$col | ConvertTo-Json -Depth 100 | Out-File -FilePath D:\result.json
注意:我指定-Depth 100
是因为 cmdlet 的默认值Depth
是2
.
推荐阅读
- python - python字典中的通配符
- python - 将 HTML 页面连接到 Django 页面
- java - .setIcon() 导致 NullPointerException
- python - 用于自动化浏览器交互的 Selenium 包
- javascript - Download canvas as image not working in firefox and microsoft edge
- .net - 合并 2 个序列
- java - 当我分配大于字节的值时会发生什么?
- firebase - 使用按位运算符的 Cloud Firestore 查询/过滤器
- javascript - 使用带有 laravel 5.6 的 Pusher 有问题
- angular - angular 7 从 ngx-treeview 获取父节点值