如何从格式化文本文件导入PSObjects数组并转换为CSV?
常规CSV操作示例
操作十分简单:
PS C:\Users\saunders\Desktop\data> PS C:\Users\saunders\Desktop\data> ls .\test.csv Directory: C:\Users\saunders\Desktop\data Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2023-01-31 1:38 PM 640 test.csv PS C:\Users\saunders\Desktop\data> PS C:\Users\saunders\Desktop\data> cat .\test.csv UserPrincipalName,"DisplayName","Title","UserType","IsLicensed" LeeG@lazydev.com,"Lee Gu","jr engineer","Member","True" MeganB@lazydev.com,"Megan Bowen","recruiter","Member","True" GradyA@lazydev.com,"Grady Archie","sr engineer","Member","True" MiriamG@lazydev.com,"Miriam Graham","Director","Member","True" openmailbox@lazydev.com,"openmailbox",,"Member","False" JohannaL@lazydev.com,"Johanna Lorenz","Senior Engineer","Member","True" JoniS@lazydev.com,"Joni Sherman","recruiter","Member","False" AlexW@lazydev.com,"Alex Wilber","Marketing Assistant","Member","True" IsaiahL@lazydev.com,"Isaiah Langer","Sales Rep","Member","True" PS C:\Users\saunders\Desktop\data> PS C:\Users\saunders\Desktop\data> $test = Import-CSV .\test.csv PS C:\Users\saunders\Desktop\data> PS C:\Users\saunders\Desktop\data> $test[3] UserPrincipalName : MiriamG@lazydev.com DisplayName : Miriam Graham Title : Director UserType : Member IsLicensed : True PS C:\Users\saunders\Desktop\data>
需求:解析格式化文本为结构化数据
但如何从格式化的文本文件中提取出可转为CSV格式的结构化数据?
PS C:\Users\saunders\Desktop\data> PS C:\Users\saunders\Desktop\data> $records = Get-Content .\records.txt PS C:\Users\saunders\Desktop\data> PS C:\Users\saunders\Desktop\data> $records UserPrincipalName : LeeG@lazydev.com DisplayName : Lee Gu Title : jr engineer UserType : Member IsLicensed : True UserPrincipalName : MeganB@lazydev.com DisplayName : Megan Bowen Title : recruiter UserType : Member IsLicensed : True UserPrincipalName : GradyA@lazydev.com DisplayName : Grady Archie Title : sr engineer UserType : Member IsLicensed : True UserPrincipalName : MiriamG@lazydev.com DisplayName : Miriam Graham Title : Director UserType : Member IsLicensed : True UserPrincipalName : openmailbox@lazydev.com DisplayName : openmailbox Title : UserType : Member IsLicensed : False UserPrincipalName : JohannaL@lazydev.com DisplayName : Johanna Lorenz Title : Senior Engineer UserType : Member IsLicensed : True UserPrincipalName : JoniS@lazydev.com DisplayName : Joni Sherman Title : recruiter UserType : Member IsLicensed : False UserPrincipalName : AlexW@lazydev.com DisplayName : Alex Wilber Title : Marketing Assistant UserType : Member IsLicensed : True UserPrincipalName : IsaiahL@lazydev.com DisplayName : Isaiah Langer Title : Sales Rep UserType : Member IsLicensed : True PS C:\Users\saunders\Desktop\data>
目标是将每条记录转置后写入CSV的一行。这类从人类可读的格式化文本还原为结构化数据的操作,正确术语是文本解析/结构化数据提取,不一定非要转为CSV,此处仅因示例数据源自CSV。
直接导出的错误
目前无法直接将$records对象导出为CSV,执行以下命令会报错:
PS C:\Users\saunders\Desktop\data> PS C:\Users\saunders\Desktop\data> $records = Get-Content .\records.txt PS C:\Users\saunders\Desktop\data> PS C:\Users\saunders\Desktop\data> Export-Csv $records Export-Csv : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Path'. Specified method is not supported. At line:1 char:12 + Export-Csv $records + ~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Export-Csv], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.ExportCsvCommand PS C:\Users\saunders\Desktop\data>
因此必须先对文本内容进行解析处理。
内容的提问来源于stack exchange,提问作者Nicholas Saunders
相关产品推荐
相关产品推荐

