基于列值拆分CSV文件的最简单方法

问题描述 投票:2回答:3

我有一份世界上每个城市的大量清单,我试图按国家划分。手动实现这一点非常繁琐,因此相信有更好的方法来实现这一目标。这让我想到了以下问题。

基于一列中的类似值将CSV文件拆分为较小的CSV文件的最简单/最佳方法是什么?

我已经看到这个问题以一些不同的方式回答,假设有人询问有C ++的经验,我不这样做。我对Java有基本的了解,对Linux有更多的经验,对Windows和Microsoft Office有更多的经验。

任何正确方向的推动都是有帮助的。

感谢您花时间阅读这篇文章。任何和所有的帮助表示赞赏。

excel csv ms-office openoffice-calc
3个回答
4
投票

显然有很多不同的方法可以实现这一点 - 如果你在Windows上,this snippet为PowerShell提供了一个很好的单行程,可以根据列中的值拆分csv文件:

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
投票

当你手动操作时,我假设你不一定需要代码来实现这一点。我对Powershell不熟悉,所以无法评论chrisb的答案。如果你可以使它工作,它看起来比我的解决方案更简单,但万一你不能,那么你可以尝试以下:

  • 在excel中打开您的csv文件
  • 如果尚未存在,则在顶行中插入标题行
  • 在菜单中转到数据,然后单击过滤器。您将在所有标题中看到漏斗图标。
  • 在国家/地区标题中,选择您要获取其记录的国家/地区。您将看到仅筛选所选国家/地区的城市。
  • 将已过滤的列复制到另一个Excel工作表中并另存为CSV文件。
  • 对所有国家/地区重复此过程。

如果你想进一步自动化,那么你可能需要进行一些编码。


0
投票

在Linux或macOS上,您可以使用awk(其中2是要拆分的列索引):

awk -F ',' '{print > ("cities-in-"$2".csv")}' cities.csv

Input file

cities.csv:

1,london,uk
2,paris,france
3,bristol,uk
4,lyon,france

Output files

城市功能于uk.csv:

1,london,uk
3,bristol,uk

城市数据paris.csv:

2,paris,france
4,lyon,france
© www.soinside.com 2019 - 2024. All rights reserved.