[玩转系统] PowerShell 基础知识:导航 CSV 文件
作者:精品下载站 日期:2024-12-14 06:21:26 浏览:13 分类:玩电脑
PowerShell 基础知识:导航 CSV 文件
在本教程中,我们将深入探讨使用 PowerShell 处理 CSV 文件的基本知识,涵盖您在现实世界中可能遇到的各种场景。本指南将帮助系统管理员和 IT 专业人员有效地管理数据,展示 PowerShell 在处理不同类型的 CSV 文件方面的强大功能和灵活性。
为了做好准备,让我们创建一个简单的 CSV 文件来使用。
@(
[pscustomobject]@{
FirstName = 'Joe'
LastName = 'Jones,Barrett'
Address = '453 1st St'
City = 'Phoenix'
State = 'AZ'
},
[pscustomobject]@{
FirstName = 'Jose'
LastName = 'Melindez'
Address = '5663 Main St'
City = 'Atlanta'
State = 'GA'
}
) | Export-Csv -Path ~Employees.csv
并使用 Get-Content 阅读它。
Get-Content -Path ~Employees.csv
没什么太奇特的,只是一个包含几个虚构员工的 CSV 文件。需要注意的一些事项稍后会派上用场;请注意,此 CSV 文件使用逗号作为字段分隔符和引号。引号将每个字段值括起来,因此您甚至可以在字段值内部使用分隔符(本例中为逗号),如“Jones-Barrett”示例。那是一个领域。
另外,请注意我使用了 Get-Content
cmdlet。这个 cmdlet 并不智能;它默认读取一个文本文件,并将内容作为字符串数组输出。让我们检查一下 Get-Content
为每个 CSV 行返回的对象类型。
Get-Content -Path ~Employees.csv | Get-Member
您会看到它返回一个简单的字符串。实际上,它是一个字符串数组。如果我使用不太常见的一元运算符来阻止 PowerShell 展开数组......
,(Get-Content -Path ~Employees.csv) | Get-Member
您可以看到 Get-Content 返回一个对象数组,在本例中是字符串。由于有左括号和右括号,它是一个数组。
如果我查看单个对象,您会发现它只是 CSV 文件的整行,包括逗号和引号。
Get-Content -Path ~/Employees.csv | Select-Object -First 1
对于每个 CSV 文件行,我们需要对象,而不是原始字符串。我想要将字段作为对象属性的对象。为此,我可以使用 Import-Csv
cmdlet。
Import-Csv -Path ~/Employees.csv
看起来好多了。它智能解析了整个CSV文件,将CSV文件中的标题行转换为对象属性名称,并将字段值作为属性值。现在让我们检查一下对象类型。
Import-Csv -Path ~/Employees.csv | Get-Member
您现在可以看到输出对象类型为 System.Management.Automation.PSCustomObject ;不仅仅是一个字符串。 Import-Csv
cmdlet 知道 CSV 文件的结构,并且能够将其转换为一组 PSCustomObject。
这是您可能会遇到的另一种类型的 CSV 文件。
Get-Content -Path ~Employees-withcommasnoquotes.csv
注意到区别了吗?没有引号,请注意第二行Jones,Barrett
。这个逗号实际上是乔名字的一部分。 Barrett
值不是他的地址。
仅供参考:我使用以下代码创建了该 CSV 文件:
@(
[pscustomobject]@{
FirstName = 'Joe'
LastName = 'Jones,Barrett'
Address = '453 1st St'
City = 'Phoenix'
State = 'AZ'
},
[pscustomobject]@{
FirstName = 'Jose'
LastName = 'Melindez'
Address = '5663 Main St'
City = 'Atlanta'
State = 'GA'
}
) | Export-Csv -Path ~Employees.csv
(Get-Content -Path ~Employees.csv).replace('"','') | Set-Content -Path ~Employees-withcommasnoquotes.csv
让我们看看 Import-Csv 如何处理这个问题。
Import-Csv -Path ~Employees-withcommasnoquotes.csv
那是不对的。 LastName
字段右侧的所有字段值都是错误的。 Import-Csv
使用其名称中的逗号作为字段分隔符。这就是引号发挥作用的地方。引号定义了整个字段,分隔符告诉 Import-Csv 字段在哪里结束和开始。
让我们换个话题,现在介绍您可能会遇到的一种场景。回想一下我之前提到的,CSV 技术上应该具有用逗号分隔的字段。好吧,有时您会发现“CSV”文件具有不同的分隔符(例如制表符)。默认情况下,Import-Csv
cmdlet 不喜欢这样。
例如,我这里有一个 CSV 文件...
Import-Csv ~/Employeeswithtabs.csv
事情看起来不太对劲。 Import-Csv
尚未将每一行转换为对象。那是因为它正在寻找逗号作为字段分隔符。如果我查看这个文件...
Get-Content ~/Employeeswithtabs.csv
您会看到字段是用制表符而不是逗号分隔的。幸运的是,有一个快速解决办法。只需使用 Delimiter
参数即可。
Import-Csv ~/Employeeswithtabs.csv -Delimiter "`t"
现在输出看起来好多了。 Import-Csv
现在正在寻找制表符作为字段分隔符而不是逗号,并且正在正确解析 CSV 文件。
为了完善这个演示,我们现在再介绍一个场景;没有标题的 CSV。也许您从某个古老的 HR 数据库中收到了一个 CSV 文件,其中没有看起来像这样的标题。
Get-Content -Path ~Employees-noheaders.csv
当您尝试使用 Import-Csv
读取 CSV 时,会发生这种情况。
Import-Csv -Path ~Employees-noheaders.csv
Import-Csv
没有与值关联的字段名称,因此它使用顶行作为标题并使它们成为属性名称。这是不对的。您可以修改 CSV 并以这种方式添加标头,但我总是更喜欢尽可能保持文件不变。要使 Import-Csv
具有有效标头,请使用 Header
参数。
Import-Csv -Path ~Employees-noheaders.csv -Header 'FirstName','LastName','Address','City','State'
好多了!当您使用 Header
参数并指定逗号分隔列表时,Import-Csv
使用从左到右的该组值作为字段名称,而不是字段名称的第一行CSV 文件。此参数允许您解析没有标题的 CSV 文件,而无需修改原始文件。
您现在应该能够获得使用 PowerShell 读取 CSV 文件的更好体验!
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag