Python 不用庫,取數據差集、並集

還記得第一篇文章是求二個數據的交集,那是一次工作中的實際需求,後面就想到了直接把差集及並集一併做了,說不定某個時候就能用到。如何取交集請查看以前的文章:

Python 不用庫,取數據差集、並集

並集、差集、交集

還是二個文件,一個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查看結果。')

所有的代碼都經過驗證,大家可放心使用。

在取差集的時候會自動把重複的數據也剔除了,在取並集的時候也同樣會去除重複數據,如果需要這些重複的數據,只想要差集或者並集呢?其實也不難,不重複的數據都有了,也找不到重複的嗎?你能做到嗎?

Python 不用庫,取數據差集、並集

週末了,祝大家週末愉快。


分享到:


相關文章: