一個腳本搞定文件合併去重,大數據處理,可以合併幾個G以上的文件

問題:

先講下需求,有若干個文本文件(txt或者csv文件等),每行代表一條數據,現在希望能合併成 1 個文本文件,且需要去除重複行。

 

分析:

一向奉行簡單原則,如無必要,絕不復雜。

如果數據量不大,那麼如下兩條命令就可以搞定

合併:

cat a.txt >> new.txt
cat b.txt >> new.txt
……

去重:

cat new.txt | sort | uniq > outfile.txt

搞定,收工。

 

但是,但是,如果文本文件非常大,幾個G大小怎麼辦?下面一個腳本可以搞定:

 

python腳本:(python2.7 和 python3.6 都試過,可以運行)

創建腳本(和 *.txt 放在同一個目錄下)

# vim merge_and_unique.py

#coding=utf-8
import os
import pandas as pd
import glob

outFileName = 'out_merged_result.csv'

def merge():
    txt_list = glob.glob('*.txt')
    print(u'共發現%s個txt文件!'% len(txt_list))
    print(u'開始合併:')
    for i in txt_list:
        fr = open(i,'r').read()
        with open(outFileName,'a') as f:
            f.write(fr)
    print(u'合併完畢!')


def unique(file):
    df = pd.read_csv(file, header=0, error_bad_lines=False, quotechar=None, quoting=3)
    dataList = df.drop_duplicates()
    dataList.to_csv(file)


if __name__ == '__main__':
    print(u'查找當前目錄下的txt文件:')
    merge()
    print(u'開始去重:')
    unique(outFileName)
    print(u'去重完成!')

 

運行:

將merge_and_unique.py腳本和 *.txt 放在同一個目錄下,執行

# python merge_and_unique.py 
查找當前目錄下的txt文件
共發現5個txt文件
開始合併!
合併完畢!
開始去重!
sys:1: DtypeWarning: Columns (0,1,2) have mixed types.Specify dtype option on import or set low_memory=False.
去重完成!

#

 

說明:

如果報錯,找不到pandas:

Traceback (most recent call last):
  File "merge_and_unique.py", line 3, in <module>
    import pandas as pd
ModuleNotFoundError: No module named 'pandas'

請pip安裝pandas

pip install pandas

 

延伸:

1、如果一不小心,看了下上面的幾行代碼,會發現,不但可以運行txt的合併,csv的合併也是可以的。

2、如果數據數量達到百億級別呢?可以試試hash每一行的值,然後再插入合併,有時間再寫個腳本,一篇文章解決一個問題就好。

 

最後,把代碼傳在這裏:

https://download.csdn.net/download/cc1949/12352216

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章