兩秒對比100萬資料差異

2021-08-17 01:29:32 字數 2101 閱讀 9245

日常工作中,有可能需要對比兩個檔案的資料差異,在大量資料的情況下,常用的辦法是使用資料庫對比,現推薦乙個使用python指令碼對比資料的方法,實際測試,檔案一有60萬行資料,檔案2有50萬行資料,對比差異耗時1.5s,大大節省了對比資料的耗時,在資料庫裡加索引的情況下,也需要7s左右出結果,所以python是無比神奇的。

**:import argparse

import sys

import time

import datetime

##################wirten by diorlitao####################################

# 使用方法

#需要安裝python3.6及以上版本

#1、將指令碼和要對比的文字檔案放到同乙個目錄下

#2、將兩個需要對比的文字轉為utf-8格式

#3、在cmd命令列模式下執行:python diff_file.py -f1 1.txt -f2 2.txt

###################1.txt 和 2.txt是要對比的文字檔案#######################

def readfile(filename):

try:

with open(filename, 'r',encoding='utf-8') as filehandle:

text = filehandle.read().splitlines()

#print(text)

return text

except ioerror as e:

print("read file error:", e)

sys.exit()

def diff_file(filename1, filename2):

text1_lines = readfile(filename1)

text2_lines = readfile(filename2)

with open('result1.txt', 'w', encoding='utf-8') as resultfile:

resultfile.write('--------------檔案1與檔案2的差異-------------------'+'\n')

diff_set = set(text1_lines).difference(set(text2_lines))

for i in diff_set:

resultfile.write(str(i)+'\n')

with open('result2.txt', 'w', encoding='utf-8') as resultfile2:

resultfile2.write('--------------檔案2與檔案1的差異-------------------' + '\n')

diff_set2 = set(text2_lines).difference(set(text1_lines))

for j in diff_set2:

resultfile2.write(str(j) + '\n')

if __name__ == '__main__':

parser = argparse.argumentparser(description="傳入兩個檔案引數")

parser.add_argument('-f1', action='store', dest='filename1', required=true)

parser.add_argument('-f2', action='store', dest='filename2', required=true)

given_args = parser.parse_args()

filename1 = given_args.filename1

filename2 = given_args.filename2

begin = datetime.datetime.now()

print('任務開始:'+ str(begin))

diff_file(filename1, filename2)

end = datetime.datetime.now()

print('任務結束,耗時:'+ str((end-begin)))

簡單實現textview文字每隔兩秒就改變一次

首先布局只需要乙個textview即可,這裡不再貼出 實現原理就是子執行緒實現乙個死迴圈,每隔兩秒給主線程傳送乙個訊息,主線程在接收到訊息時更改控制項狀態 這個方法可以實現文字每隔兩秒就改變一次,public void texttask else super.handlemessage msg ne...

通過for迴圈每隔兩秒按順序列印出arr中的數字

方法1 var i 0 var arr 1,2,3,4,5,6 function f 方法2 var arr 1,2,3,4,5,6 var j 0 function fn for var i 0 i arr.length i 這裡我們另外乙個全域性變數來儲存值,每執行一次函式fn,j就加一次,所以...

交換兩數方法對比

異或運算 void swap int a,int b 臨時變數方法 void swap int a,int b 異或方法的缺點 對於臨時變數法,每次賦值只要讀取乙個變數的值到暫存器,然後再從暫存器寫回到另乙個變數中即可,前後涉及兩次記憶體寫入操作 但是對於異或運算操作,每次都需要讀取兩個資料到暫存器...