我已经将物联网数据集和其网站上的内容抓取到了一个.csv文件(我们将其称为data.csv)中。其中某些内容以日语/中文/多种欧洲语言编码,当我导入该程序的程序检测到这些特殊字符之一时,拒绝打开。
是否可以使用PowerShell从csv中删除所有非英语编码并将其导出为副本?我的意思是,保留a-z,A-Z,0-9,逗号,问号,方括号等,但是从数据集中删除非英语的内容吗?
我尝试从记事本中将文件另存为utf-8编码,但这并不能解决问题。
答案 0 :(得分:1)
按字符的十六进制值匹配的正则表达式可以工作。天真的方法是用有效的字符替换任何无效字符。通常将-
用作此类字符
作为样本数据,请考虑一些包含日语和欧洲字母åäöè
的废话CSV:
id,data
1,Lorem内ょへconsectetur
2,ipsum 球経風adipiscing
3,dolor
4,sitåäöèelit
5,amet
将文件导入为CSV,循环浏览并用破折号替换每个非ASCII字符。正则表达式[^\x00-\x7A]
将匹配十六进制值为00到122或nul
到z
的字符。根据您的用例,相应地调整范围。像这样
$data = Import-Csv C:\temp\mixed.csv
$data | % {
$_.data = $_.data -replace "[^\x00-\x7A]","-"
}
$data
# Output
id data
-- ----
1 Lorem---consectetur
2 ipsum ---adipiscing
3 dolor
4 sit-----elit
5 amet
此方法有一个很大的缺点:它会丢失信息。考虑以下数据:
1,sensor-内
2,sensor-ょ
3,sensor-へ
输出将仅去除汉字,因此将包含三个包含sensor--
的元素。如果那不好,请确定非ASCII字符需要哪种转换。将值转换为普通十六进制?完全跳过那些?音译成拉丁字母?