還記得第一篇文章是求二個數據的交集,那是一次工作中的實際需求,後面就想到了直接把差集及並集一併做了,說不定某個時候就能用到。如何取交集請查看以前的文章:
還是二個文件,一個A.TXT,一個B.TXT,取差集或並集後輸出C.TXT(取差集輸出的C.TXT有二種情況,一種是取完差集的A,一種是取完差集的B,需要注意一下),主要思路還是利用set()集合的特性來做。詳細情況,代碼註釋裡都有,需要的朋友可以自行查看。
取差集代碼如下:
# -*- coding:UTF-8
# 作者:aovs 2018-03-07
# Python 版本:3.6.4
# 本代碼實現將a.txt、b.txt二個文本文件取差集後輸出c.txt文檔,c.txt為a/b去除重複後的b值(若x-y則c.txt為a/b去重後的a值),輸出的文檔數據無序無重複。
# 將a.txt創建為列表
print ('本程序實現將a.txt、b.txt二個文本文件取並集後輸出c.txt文檔,c.txt為a/b去除重複後的b值,輸出的文檔數據無序無重複。')
print ('請確定你的Python版本不低於3.6.4,a.txt和b.txt文件已經準備就緒。')
lista = [] # 創建空列表lista
fa = open('A.txt',encoding='utf-8') # 打開a.txt,最後一行必須換行
# 'a.txt'每行數據賦給列表lista
for line in fa.readlines():
lista.append(line.replace('\n','\n')) #將'\n'替換成換行
# 將b.txt創建為列表
listb = [] # 創建空列表listb
fb = open('B.txt',encoding='utf-8') # 打開a.txt,最後一行必須換行
# 'b.txt'每行數據賦給列表listb
for line in fb.readlines():
listb.append(line.replace('\n','\n')) #將'\n'替換成換行
x = set(lista) # 將lista去重後賦給x
y = set(listb) # 將listb去重後賦給y
c = y - x # y、x取差集(若x-y則c.txt為a/b去重後的a值)
fc = open('c.txt', 'w',encoding='utf-8') # 創建或打開'C.TXT'
fc.writelines(c) # 將交集數據寫入'c.TXT'
fc.close() # 搞定,收工。
print ('正在處理數據……請稍候')
print ('搞定,打開a.txt同文件夾下的c.txt查看結果。')
取並集代碼如下:
# -*- coding:UTF-8
# 作者:aovs 2018-03-07
# Python 版本:3.6.4
# 本代碼實現將a.txt、b.txt二個文本文件取並集後輸出c.txt文檔,輸出的文檔數據無序無重複。
# 將a.txt創建為列表
print ('本程序實現將a.txt、b.txt二個文本文件取並集後輸出c.txt文檔,輸出的文檔數據無序無重複。')
print ('請確定你的Python版本不低於3.6.4,a.txt和b.txt文件已經準備就緒。')
lista = [] # 創建空列表lista
fa = open('A.txt',encoding='utf-8') # 打開a.txt,最後一行必須換行
# 'a.txt'每行數據賦給列表lista
for line in fa.readlines():
lista.append(line.replace('\n','\n')) #將'\n'替換成換行
# 將b.txt創建為列表
listb = [] # 創建空列表listb
fb = open('B.txt',encoding='utf-8') # 打開a.txt,最後一行必須換行
# 'b.txt'每行數據賦給列表listb
for line in fb.readlines():
listb.append(line.replace('\n','\n')) #將'\n'替換成換行
x = set(lista) # 將lista去重後賦給x
y = set(listb) # 將listb去重後賦給y
c = x | y # x、y取並集
fc = open('c.txt', 'w',encoding='utf-8') # 創建或打開'C.TXT'
fc.writelines(c) # 將交集數據寫入'c.TXT'
fc.close() # 搞定,收工。
print ('正在處理數據……請稍候')
print ('搞定,打開a.txt同文件夾下的c.txt查看結果。')
所有的代碼都經過驗證,大家可放心使用。
在取差集的時候會自動把重複的數據也剔除了,在取並集的時候也同樣會去除重複數據,如果需要這些重複的數據,只想要差集或者並集呢?其實也不難,不重複的數據都有了,也找不到重複的嗎?你能做到嗎?
週末了,祝大家週末愉快。
閱讀更多 aovs 的文章