您当前的位置:首页 > 计算机 > 云技术 > 大数据

一个脚本搞定文件合并去重,大数据处理,可以合并几个G以上的文件

时间:02-04来源:作者:点击数:

问题:

先讲下需求,有若干个文本文件(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 放在同一个目录下)

# vimmerge_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每一行的值,然后再插入合并,有时间再写个脚本,一篇文章解决一个问题就好。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门