=Start=
缘由:
在做分析的时候经常会遇到求交集的情况,如果数据都在Hive表里面,通过几个inner join就可以找出来;如果数据是以文件的形式存在的话,之前以为comm命令就可以满足,但是实测发现不是我想要的,而且只能支持2个文件,所以自己简单写一个脚本来实现在多个文件中找common值的功能,方便自己使用。
正文:
参考解答:
直接看代码吧,思路和内容都很简单:
#!/usr/bin/env python
# coding=utf-8
import sys
def main():
result = set()
with open(sys.argv[1]) as fp1:
for line in fp1:
result.add(line.strip())
#
#
# print(len(result))
for eachFile in sys.argv[2:]:
set2 = set()
with open(eachFile) as fp2:
for line in fp2:
set2.add(line.strip())
#
#
result = result.intersection(set2)
print(len(result))
#
print(len(result))
print(result)
if __name__ == '__main__':
main()
用起来也很简单:
python py_findCommon.py file1 [file2]...
即可。
参考链接:
Python3 集合
https://www.runoob.com/python3/ref-set-intersection.html
https://stackoverflow.com/questions/2541752/best-way-to-find-the-intersection-of-multiple-sets
=END=
《 “找common值的小脚本” 》 有 2 条评论
Faker2 是 Faker 维护仓库,收集全网目前能正常使用的脚本,包括懒人签到、积分换话费等等“实用”脚本。不过项目作者声明所有脚本限于技术研究,妥善使用对应的脚本。
https://github.com/shufflewzc/faker2
python 集合比较(交集、并集,差集)
https://blog.csdn.net/isoleo/article/details/13000975
`
a = t | s # t 和 s的 并集
b = t & s # t 和 s的 交集
c = t – s # 求 差集 (项在t中,但不在s中)
d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中)
>>> x = set(‘spam’)
>>> y = set([‘h’,’a’,’m’])
>>> x, y
(set([‘a’, ‘p’, ‘s’, ‘m’]), set([‘a’, ‘h’, ‘m’]))
# 再来些小应用。
>>> x & y # 交集
set([‘a’, ‘m’])
>>> x | y # 并集
set([‘a’, ‘p’, ‘s’, ‘h’, ‘m’])
>>> x – y # 差集
set([‘p’, ‘s’])
基本操作:
t.add(‘x’) # 添加一项
s.update([10,37,42]) # 在s中添加多项
使用remove()可以删除一项:
t.remove(‘H’)
len(s)
# set 的长度
x in s
# 测试 x 是否是 s 的成员
x not in s
# 测试 x 是否不是 s 的成员
s.issubset(t)
s = t
# 测试是否 t 中的每一个元素都在 s 中
`