我有一份世界上每个城市的大量名单,我试图按国家划分。手动实现这一点非常繁琐,因此相信有更好的方法来实现这一目标。这让我想到了以下问题。
根据一列中的相似值将CSV文件拆分为较小的CSV文件的最简单/最佳方法是什么?
我已经看到这个问题以一些不同的方式回答,假设有人询问有C ++经验,我不这样做。我对Java有基本的了解,对Linux有更多的经验,对Windows和Microsoft Office也有更多的经验。
任何正确方向的推动都是有帮助的。
感谢您花时间阅读这篇文章。任何和所有的帮助表示赞赏。
答案 0 :(得分:4)
显然有许多不同的方法可以实现这一目标 - 如果你在Windows上,this snippet为PowerShell提供了一个很好的单线程,可以根据列中的值拆分csv文件: / p>
Import-Csv file.csv | Group-Object -Property "department" |
Foreach-Object {$path=$_.name+".csv" ; $_.group |
Export-Csv -Path $path -NoTypeInformation}
将file.csv
替换为您的csv文件,将"department"
替换为您想要拆分文件的列标题。它将根据所选列中的每个唯一值编写一个新的csv。
如果你从未使用过Powershell,here是一个不错的介绍。
答案 1 :(得分:1)
正如您手动操作一样,我假设您不一定需要代码才能实现此目的。我对Powershell不熟悉,所以无法评论chrisb的答案。如果你可以使它工作,看起来它比我的解决方案简单,但如果你不能,那么你可以尝试以下:
如果你想进一步自动化,那么你可能需要进行一些编码。
答案 2 :(得分:0)
在Linux或macOS上,您可以使用awk
(其中2是要拆分的列索引):
awk -F ',' '{print > ("cities-in-"$2".csv")}' cities.csv
city.csv:
1,london,uk
2,paris,france
3,bristol,uk
4,lyon,france
city-in-uk.csv:
1,london,uk
3,bristol,uk
city-data-paris.csv:
2,paris,france
4,lyon,france