python - 比较两个不同文件中的字符串的脚本

标签 python perl bash

我对 stackoverflow 和脚本编写都是全新的。我正在寻求帮助来开始编写脚本,而不一定是寻找有人来编写它。

这是我所拥有的: File1.csv - 包含一些信息,我只对 MAC 地址感兴趣。 File2.csv - 有一些不同的信息,但也包含 MAC 地址。

我需要一个脚本来解析 file1.csv 中的 MAC 地址,并在 file2.csv 中出现任何 MAC 地址时记录报告。

问题:

  1. 有关我使用的语言(最好是 Perl、Python 或 bash)有什么建议吗?

  2. 任何人都可以建议一些所需逻辑的结构(即使只是伪代码)吗?

更新

使用@Adam Wagner 的方法,我真的很接近!

import csv
#Need to strip out NUL values from .csv file to make python happy
class FilteredFile(file):
        def next(self):
                return file.next(self).replace('\x00','').replace('\xff\xfe','')

reader = csv.reader(FilteredFile('wifi_clients.csv', 'rb'), delimiter=',', quotechar='|')
s1 = set(rec[0] for rec in reader)

inventory = csv.reader(FilteredFile('inventory.csv','rb'),delimiter=',')
s2 = set(rec[6] for rec in inventory)

shared_items = s1.intersection(s2)
print shared_items

这总是输出:(即使我修改 .csv 文件以使其具有匹配的 MAC 地址)

set([])

csv 文件的内容

wifi_clients.csv

macNames, First time seen, Last time seen,Power, # packets, BSSID, Probed ESSIDs

库存.csv

Name,Manufacturer,Device Type,Model,Serial Number,IP Address,MAC Address,...

最佳答案

这是我采取的方法:

  1. 迭代每个 csv 文件(Python 有一个方便的 csv 模块来完成此操作),捕获 mac 地址并将其放入一组(每个文件一个)。再一次,Python 有一个很棒的内置 set 类型。 Here's a good example of using the csv module当然,the docs .

  2. 接下来,您可以获取set1 (file1) 和set2 (file2) 的交集。这将显示文件一和文件二中都存在的 mac 地址。

示例(Python):

s1 = set([1,2,3])  # You can add things incrementally with "s1.add(value)"
s2 = set([2,3,4])

shared_items = s1.intersection(s2)
print shared_items

哪些输出:

set([2, 3])

可以通过打印(然后将输出重定向到文件)、使用logging模块、直接保存到文件等任何方式来记录这些共享项目。

我不确定您正在寻找的答案有多深入,但这应该可以帮助您开始。

更新:CSV/Set 使用示例

假设您有一个文件“foo.csv”,看起来像这样:

bob,123,127.0.0.1,mac-address-1
fred,124,127.0.0.1,mac-address-2

构建该集合的最简单方法如下:

import csv

set1 = set()
for record in csv.reader(open('foo.csv', 'rb')):
    user, machine_id, ip_address, mac_address = record
    set1.add(mac_address)
    # or simply "set1.add(record[3])", if you don't need the other fields.

显然,您需要为每个文件提供类似的内容,因此您可能希望将其放入函数中以使生活更轻松。

最后,如果您想采用更简洁但更酷的 python 方式,您也可以像这样构建集合:

csvfile = csv.reader(open('foo.csv', 'rb'))
set1 = set(rec[3] for rec in csvfile)   # Assuming mac-address is the 4th column.

关于python - 比较两个不同文件中的字符串的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8435912/

相关文章:

python - 使用 `K.constant` 或 `self.add_weight(trainable=False)` 作为层中的固定权重有什么不同

python - IntEnum 子类无法正确比较

bash - 是否可以从 Perl 调用 bash 函数?

perl - 使用 perl(或 wget)仅下载新的/修改过的文件

android - Git 设置 - Git Bash 的终端模拟器

linux - 将输出从一个函数重定向到另一个函数

python - 为什么python双引号在文件名中转换为连字符?

python - 树莓派相机透明图像叠加

postgresql - 如何在没有文件或内存的情况下对 IO::Handle 进行子类化以正确获取低级文件句柄?

javascript - 强制 node.js 使用 bin/bash 而不是 sh