首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据header名称中的常见文本来检测和删除CSV列?

如何根据header名称中的常见文本来检测和删除CSV列?
EN

Stack Overflow用户
提问于 2016-08-30 20:42:50
回答 2查看 1.5K关注 0票数 0

我正在处理我最近创建的CSV文件。CSV文件包含具有标题的列和相应的行。

我需要删除标题中包含特定文本的整个列(包括其数据)。例如,列1具有名为intID的标头,列2具有名为boolID的标头,列3具有名为charID的标头,依此类推('ID‘是常见文本)。有一些列的标题中没有'ID‘作为文本,所以我们需要保留它们。

csv文件是动态生成的,因此根据我们为csv选择的数据,可能会有更多/更少的列。但我们需要这些列的标题包含一些要删除的常见文本。

我们如何才能做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2016-08-30 21:21:35

像这样的东西能奏效吗?

代码语言:javascript
运行
复制
$yourfile = "<path to your csv>"
# Import the CSV
$csv = Import-Csv -Path $yourfile
# Find all columns that do not end with "ID"
$colsToKeep = $csv | Get-Member -MemberType NoteProperty |?{$_.name -notmatch "^.+ID$"} | Select-Object -ExpandProperty name
# Filter out all unwanted columns
$newCsv = $csv | Select-Object -Property $colsToKeep
# Export CSV to new file
$newCsv | Export-Csv -Path "<path to new csv>"
票数 0
EN

Stack Overflow用户

发布于 2016-08-30 21:44:25

假设以下情况:

  • ID部分不是纯文本"ID“,而是以intcharbool

开头的动态任意文本

  • 标头

让我们计算ID部分的出现次数,并构建一个仅使用一次的标头列表,然后导出CSV。

代码语言:javascript
运行
复制
$csv = Import-Csv 1.csv

$prefix = '^(int|char|bool)' # or '^([a-z])' for any lowercase text
$headers = $csv[0].PSObject.Properties.Name
$uniqueIDs = $headers -creplace $prefix, '' | group | ? Count -eq 1 | select -expand Name
$uniqueHeaders = $headers | ?{ $_ -creplace $prefix, '' -in $uniqueIDs }

$csv | select $uniqueHeaders | Export-Csv 2.csv -NoTypeInformation

注意:在旧的PowerShell 2.0中,不使用? Count -eq 1,而使用?{ $_.Count -eq 1 }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39227860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档