一个脚本搞定文件合并去重,大数据处理,可以合并几个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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值