【问题标题】:Merge csv files with the same filename from different zip archives合并来自不同 zip 档案的具有相同文件名的 csv 文件
【发布时间】:2014-03-21 20:09:56
【问题描述】:

这是我的情况:

我有多个 zip 存档,文件名类似于 20130101_001.zip、20130102_001.zip、20130103_001.zip 等。

这些档案中的每一个都包含同名的 csv 文件: file1.csv、file2.csv、file3.csv(这些文件并不相同,但它们在所有档案中都具有相同的名称)

我在 ETL 流程中使用这些文件,我想解压缩所有档案并将这些文件合并在一起,因此我只需运行该流程一次。 如果有办法做到这一点,使文件没有重复记录,那就太好了,但如果不能实现,我会使用 ETL 工具来删除它们。

这应该在 Windows 中完成,我没有语言偏好。

【问题讨论】:

  • 我使用 7zip 解压缩所有档案并获取 file1.csv、file1 (1).csv 等,但我没有设法遍历并合并它们。我还尝试在 cmd 中进行简单复制,并将文件一个接一个地附加。现在我需要将其组合起来..

标签: powershell csv merge zip


【解决方案1】:

感谢回复,终于不用cmdlet解决了。

我使用 7zip 命令解压缩所有文件,然后使用这个批处理脚本来合并文件:

setlocal
set first=1
>pro.txt (
  for %%F in (file1*.csv) do (
    if defined first (
      type "%%F"
      set "first="
    ) else more +1 "%%F"
  )
)

我有大约 20 个文件,所以我为每个文件重复这个循环。 后来我用 SyncSort 规范化记录

【讨论】:

    【解决方案2】:

    查看 cmdlet ConvertFrom-Csv 和 ConvertTo-Csv。它们允许您将 csv 转换为 PowerShell 对象数组,反之亦然。

    语法相当简单:

    $csvObject1 = Get-Content $pathToCSVFile | ConvertFrom-Csv 
    

    对您要处理的任何 csv 文件重复此操作,然后您可以在 PowerShell 中执行所需的任何逻辑来合并它们。完成后,使用这个:

    $csvOutputObject | ConvertTo-Csv -NoTypeInformation | Set-Content $pathToOutputCSVFile
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多