python 快速比較大檔案的元素異同之處

2021-10-08 00:19:46 字數 2345 閱讀 9877

假如,在有兩個大檔案分別儲存了大量的資料,資料其實很簡單就是一堆字串,每行儲存一條,如何快速篩選出兩個檔案的異同之處麼,或者如何篩選出兩個檔案中不同的元素呢?

剛開始我是通過最簡單的方法,利用for迴圈去乙個個的判斷,時間複雜度為m的n次冪,當然當檔案數量級為十萬或者百萬時,速率簡直慢到了極點。

利用set()的different(方法)可快速比較,兩個set集合的不同之處,也就是對集合進行數**算

假設:資料1擁有858882條記錄,資料2有360029條記錄,快速挑選出資料2中而不存在與資料1中的資料

方法:先將兩個檔案中的資料讀入兩個list:data1和data2,然後通過:set(data2).difference(set(data1)),獲取data2與data1的差集

下面為乙個小的demo,可以看到近百萬級的資料,比較出差集也就需要1秒左右,效率不是一般的高

import time

t1 = time.time(

)data1 =

for i in

open

("indb.txt"

,"r"

,encoding=

"utf-8"):

i = i.strip(

"\n"

) i = i.lower(

)data2 =

for i in

open

("data/18年.filename"

python中list最多可以存放多少條資料呢?對於這個問題,有個網友調研了python的文件,結果跟計算機的效能相關

64位機器:2^63-1=9223372036854775807

32位機器:2^31-1=2147483647

import sys

print(sys.maxsize)

print(pow(2,63)-1)

9223372036854775807

9223372036854775807

參考:

內建函式

作用add()

為集合新增元素

clear()

移除集合中的所有元素

copy()

拷貝乙個集合

difference()

返回多個集合的差集

difference_update()

移除集合中的元素,該元素在指定的集合也存在。

discard()

刪除集合中指定的元素

intersection()

返回集合的交集

intersection_update()

返回集合的交集。

isdisjoint()

判斷兩個集合是否包含相同的元素,如果沒有返回 true,否則返回 false。

issubset()

判斷指定集合是否為該方法引數集合的子集。

issuperset()

判斷該方法的引數集合是否為指定集合的子集

pop()

隨機移除元素

remove()

移除指定元素

symmetric_difference()

返回兩個集合中不重複的元素集合。

symmetric_difference_update()

移除當前集合中在另外乙個指定集合相同的元素,並將另外乙個指定集合中不同的元素插入到當前集合中。

union()

返回兩個集合的並集

update()

給集合新增元素

Linux 使用grep快速比較兩個檔案不同

兩個檔案的比較,會有同學說使用diff,和vimdiff就可以快速比較,為什麼還要使用grep呢?有些時候,diff和vimdiff的時候環境不符合,這樣的情況,就可以使用grep來解決這個問題。先說下命令 grep vwf file1 file2 v 取反,就是找到的相同的地方的,但是輸出的內容卻...

SQLSERVER中如何快速比較兩張表的不一樣

一般來說,如何檢測兩張表的內容是否一致,體現在複製 的時候發布端和訂閱端的兩端的資料上面 我這裡羅列了一些如何從資料庫層面來解決此類問題的方法 第一步當然就是檢查記錄數 是否一致,否則不用想其他方法了 這裡我們用兩張表t1 old,t1 new 來演示方法介紹 方法一 老老實實看表結構和表記錄數,弊...

SQLSERVER中如何快速比較兩張表的不一樣

不知不覺要寫2014年的最後一篇博文了 一般來說,如何檢測兩張表的內容是否一致,體現在複製的時候發布端和訂閱端的兩端的資料上面 我這裡羅列了一些如何從資料庫層面來解決此類問題的方法 第一步當然就是檢查記錄數是否一致,否則不用想其他方法了 這裡我們用兩張表t1 old,t1 new來演示 方法介紹 方...