2025年3月31日 星期一 乙巳(蛇)年 正月初一 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 云技术 > 大数据

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

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

问题:

先讲下需求,有若干个文本文件(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每一行的值,然后再插入合并,有时间再写个脚本,一篇文章解决一个问题就好。

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