微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我是stackoverflow和脚本的新手.我正在寻找帮助以开始编写脚本,而不一定要找人写.

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

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

问题:

>关于我使用的语言的任何提示,最好是perl,python或bash?
>任何人都可以建议一些所需逻辑的结构(即使只是在伪代码中)?

更新

使用@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

  
  inventory.csv
  
  

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

解决方法:

这是我采取的方法

>迭代每个csv文件(python有一个方便的csv模块来完成此操作),捕获mac-address并将其放在一个集合中(每个文件一个).再一次,python有一个很棒的内置集类型. Here’s a good example of using the csv module和当然,the docs.
>接下来,您可以获得set1(file1)和set2(file2)的交集.这将显示存在于第一个和第二个文件中的mac-addresses.

示例(在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])

记录这些共享项目可以通过打印(然后将输出重定向文件),使用日志记录模块,直接保存到文件中完成.

我不确定你正在寻找的答案有多深入,但这应该让你开始.

更新:CSV /设置用法示例

假设你有一个文件“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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐