首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Windows PowerShell进阶IO操作之CSV

推荐一首纯音乐: http://music.163.com/#/album/36141316/

Good Night - Delos

今天接着讲powershell平时文件操作中的另一个经常需要用到的类型:CSV

csv一般用来批量导入/导出数据的时候使用,比如创建用户,获取用户信息,系统信息… 而且主流数据库都支持csv格式,可以无缝对接。其一般默认以逗号,为分隔符,以第一行为表头。当然你也可以指定特殊的分隔符和表头。

常见命令

以下为powershell自带的csv相关命令:(NOTE:我有时候为了省事会写cmdlets的alias,你可以用Get-Help alias查看其对应的全称和用法. 如下查询则为: "Get-Help gcm")

ConvertFrom-Csv/Import-Csv

这2个cmdlets都是试图读取csv格式的数据,主要区别ConvertFrom-Csv接受的是一个对象,而Import-Csv接受的是文件。

它们对于非标准csv格式数据会有不同的处理方式,如下试图读取txt文本转化为csv:

ConvertTo-Csv/Export-Csv

这2个cmdlets都是试图转化非csv格式数据到csv格式,ConvertTo-Csv返回的是一个对象,而Export-Csv是保存到文件中。这里需要提一点的就是我们在powershell console当中看到的cmdlets打印到屏幕的data只是很有限的信息,而ConvertTo-Csv/Export-Csv是会将对象的全部数据转化的。

参考链接

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertfrom-csv?view=powershell-6

https://docs.microsoft.com/zh-cn/powershell/module/Microsoft.PowerShell.Utility/Import-Csv?view=powershell-6

https://docs.microsoft.com/zh-cn/powershell/module/Microsoft.PowerShell.Utility/ConvertTo-Csv?view=powershell-6

https://docs.microsoft.com/zh-cn/powershell/module/Microsoft.PowerShell.Utility/Export-Csv?view=powershell-6

PSCustomObject HashTable & CSV

我们之前讲哈希表的时候,大家有没有发现其看起来很像csv的数据格式。

但是如果你试图将其转化为csv,你会发现数据格式完全不是我们在console看到那些数据:

这个时候我们就可以用PSCustomObject来实现上面的需求(powershell V3.0之前请用PSObject,其实还可以用别的方法,这个后面会专门写篇文章来讲)

所以我们在需要使用hashtable而又同时需要涉及到其与csv的交互,请使用这种方式。

获取未知csv的有序表头

当我们处理csv数据时,表头是关键的信息,在不知道表头的情况下,对csv数据的处理基本寸步难行,那么如何获取它呢?

目前powershell没有直接类似.Header的这种属性供你直接访问,我们只能通过间接的手段获取。一开始我想到的是用下面的方法获取:

但是这只能解决常规或者说默认情况下的csv数据,如果遇到一些奇怪格式的csv,比如表头或者数据本身就包含双引号或者分隔符(当然一般情况下不会这样,但是我们的代码肯定要保证任何情况下都能work才行。)而且上一种方法,用cat去获取表头进行了一次IO操作,后面用ipcsv读取又进行了一次IO操作,造成了不必要的开销。

23-weird_format_csv

后来面向google编程后查到了下面的方法:

这个我们成功的获取到了表头,并能够通过表头获取到对应的属性值。而且只进行了一次IO操作。至于psobject在这里什么一次,后续会有专门的讲解,大家先了解这种使用方法即可。大家有什么更好的方法也可以和我说。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180429G0ZS2W00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券