python - 将 CSV 文件的几行与防火墙规则合并,以便更轻松地解析它们?

标签 python parsing csv

我有一个 CSV 文件,该文件是我使用从 Check Point 防火墙策略导出的 HTML 创建的。 在某些情况下,每个规则都表示为多行。当规则具有多个地址源、目的地或服务时,就会发生这种情况。 我需要输出仅在一行中描述每条规则。 很容易区分每条规则的开始时间。第一列是规则 ID,它是一个数字。

这是一个例子。用绿色标记了应该移动的字符串:

/image/zmQ2X.jpg

让我给你举个例子:

NO.;NAME;SOURCE;DESTINATION;SERVICE;ACTION;
1;;fwgcluster;mcast_vrrp;vrrp;accept;
;;;;igmp;;
2;Testing;fwgcluster;fwgcluster;FireWall;accept;
;;fwmgmpe;fwmgmpe;ssh;;
;;fwmgm;fwmgm;;;

我需要的是,用伪代码解释,是这样的:

读取下一行的第一列。如果有一个数字: 评估下一行的第一列。如果那里没有数字,则连接(用逗号分隔)\ 将这一行各列中的字符串与最后一行相加,并删除当前行中的文本

输出应该是这样的:

NO.;NAME;SOURCE;DESTINATION;SERVICE;ACTION;
1;;fwgcluster;mcast_vrrp;vrrp-igmp;accept;
;;;;;;
2;Testing;fwgcluster-fwmgmpe-fwmgm;fwgcluster-fwmgmpe-fwmgm;FireWall-ssh;accept;
;;;;;;
The empty lines are there only to be more clear, I don't actually need them.

谢谢!

最佳答案

这应该可以帮助您入门

import csv

with open('data.txt', 'r') as f:
    reader = csv.DictReader(f, delimiter=';')
    for r in reader:
        print r

编辑:鉴于您所需的输出,这应该可以让您接近目标。它有点粗糙,但可以满足您的大部分需求。它会检查“否”。键,如果它有值,它将开始一条记录。如果不是,它将将该行中的任何其他数据与记录中的等效数据连接起来。最后,当创建新记录时,旧记录会附加到结果中,这也会发生在最后捕获最后一项。

import csv

result, record = [], None
with open('data2.txt', 'r') as f:
    reader = csv.DictReader(f, delimiter=';', lineterminator='\n')
    for r in reader:
        if r['NO.']:
            if record:
                result.append(record)
            record = r
        else:
            for key in r.keys():
                if r[key]:
                    record[key] = '-'.join([record[key], r[key]])
    if record:
        result.append(record)

print result                    

关于python - 将 CSV 文件的几行与防火墙规则合并,以便更轻松地解析它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19305778/

相关文章:

python - Matplotlib 条形图定制

python - Python 中的 Youtube 数据 API nextPageToken 循环

python - 具有两个 "synchronized"变量的类的最短示例

ruby - 就地更新追加到 CSV 行,Ruby

python - 如何解析一个简单的csv文件?

python - 在 python 中使用 CSV 文件数据绘制热图

python - Cython:如何包装返回 C++ 对象的 C++ 函数?

c++ - 将 Hex Char 转换为 Int - 有更好的方法吗?

android - 无法解析 Azure 云存储中的连接字符串

php - BeautifulSoup 和 php/html 文件