【问题标题】:how to merge selective column contents in a csv file [closed]如何合并csv文件中的选择性列内容[关闭]
【发布时间】:2019-07-15 17:19:44
【问题描述】:

我设法获得了一个 csv 文件输出,但看起来不太好,并且可以合并很多字段。请帮忙

我有什么:

    Firewall,zone-Context,Policy,Source,Destination,Application,Action
    fw_name,zone_a==>zone_b,policy1,172.25.41.0/24,,,
    fw_name,zone_a==>zone_b,policy1,172.25.60.0/24,,,
    fw_name,zone_a==>zone_b,policy1,,172.27.16.38/32,,
    fw_name,zone_a==>zone_b,policy1,,172.27.16.48/32,,
    fw_name,zone_a==>zone_b,policy1,,,TCP_9090,
    fw_name,zone_a==>zone_b,policy1,,,TCP_8080,
    fw_name,zone_a==>zone_b,policy1,,,,Permit

    fw_name,zone_x==>zone_y,policy2,172.25.41.0/24,,,
    fw_name,zone_x==>zone_y,policy2,172.25.60.0/24,,,
    fw_name,zone_x==>zone_y,policy2,,172.27.16.38/32,,
    fw_name,zone_x==>zone_y,policy2,,172.27.16.48/32,,
    fw_name,zone_x==>zone_y,policy2,,,TCP_9090,
    fw_name,zone_x==>zone_y,policy2,,,TCP_2020,
    fw_name,zone_x==>zone_y,policy2,,,,Permit

所需的输出:使用 excel 或 google 表格打开时只有两行。 两个源地址和两个目标地址以及两个应用程序被分组到一个单元格中,最好在每个单元格的末尾都有换行符

    Firewall,zone-Context,Policy,Source,Destination,Application,Action
    fw_name,zone_a==>zone_b,policy1,"172.25.41.0/24
    172.25.60.0/24","172.27.16.38/32
    172.27.16.48/32","TCP_9090 
    TCP_8080",Permit

    fw_name,zone_x==>zone_y,policy2,"172.25.41.0/24
    172.25.60.0/24","172.27.16.38/32
    172.27.16.48/32","TCP_9090
    TCP_2020",Permit

对于所有具有共同“防火墙、区域上下文、策略”的行,我正在尝试合并各自的“源、目标、应用程序、操作”

我尝试过使用 bash,它只会变得更糟。

一个朋友写了一些代码,看起来有点小错误,但正在寻找一些简单的东西

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: python csv export-to-csv


【解决方案1】:

您应该能够使用 Python 执行以下操作:

import csv
from itertools import groupby

with open('input.csv') as f_input, open('output.csv', 'w', newline='') as f_output:
    csv_input = csv.reader(f_input)
    csv_output = csv.writer(f_output)
    header = next(csv_input)
    csv_output.writerow(["Firewall", "zone-Context" ,"Policy" ,"Source", "Destination", "Application", "Action"])

    for k, g in groupby(csv_input, lambda x: x[:3]):
        cols = list(zip(*g))
        row = ['\n'.join(value for value in col if value) for col in cols[3:]]
        csv_output.writerow([*k, *row])

这给出了一个output.csv 文件,其中包含:

Firewall,zone-Context,Policy,Source,Destination,Application,Action
fw_name,zone_a==>zone_b,policy1,"172.25.41.0/24
172.25.60.0/24","172.27.16.38/32
172.27.16.48/32","TCP_9090
TCP_8080",Permit
fw_name,zone_x==>zone_y,policy2,"172.25.41.0/24
172.25.60.0/24","172.27.16.38/32
172.27.16.48/32","TCP_9090
TCP_2020",Permit

【讨论】:

    猜你喜欢
    • 2013-07-14
    • 2016-03-25
    • 1970-01-01
    • 2019-07-13
    • 2018-03-12
    • 2016-11-21
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多