• 欢迎访问王晓的博客,每天更新常见工作和生活中遇到的常见问题解决方法,关注科技最新动态

python3 大文件去重的方法

程序人生 wangxiao 来源:jkdgvse 1周前 (10-17) 27次浏览 已收录 0个评论 扫描二维码

一、生成待去重数据

每行是固定位数的数字串

import os
from random import randint
 
#-- from u_工具 import *
 
 
print("———— 开始 ————")
#-- 打点()
 
# 用来配置的变量
位数 = 13
行数 = 500 * 10000
 
输出目录 = "./a_输入"
输出文件 = f"{输出目录}/随机数.txt"
 
 
# 预处理
_00 = "".join(["0" for i in range(位数 - 1)])
_100 = "1" + _00
最小值 = int(_100)
_1000 = _100 + "0"
最大值 = int(_1000)
 
if not os.path.exists(输出目录):
    os.makedirs(输出目录)
#-- 输出文件 = 文件名防重_追加数字(输出文件)
 
 
# 实际处理
with open(输出文件,"a") as f:
    for i in range(行数):
 
        f.write(f"{randint(最小值, 最大值)}\n")
 
        百分比 = (i+1) / 行数 * 100
        if 百分比 == int(百分比):
            print(f"已完成{int(百分比)}%")
 
 
#-- 打点()
#-- print(f"\n总耗时:{计时(0)}")
print("———— 结束 ————")

二、通过set()按行去重

1. 按原值比较

(1)读取全部数据

(2)用正则表达式来分行

(3)通过set数据结构来去除重复数据

(4)将set的数据写入文件

import os
import re
 
#-- from u_工具 import *
 
 
print("———— 开始 ————")
#-- 打点()
 
# 用来配置的变量
输入目录 = "./a_输入"
输出目录 = "./b_输出"
输出文件 = f"{输出目录}/去重结果.txt"
 
 
# 预处理
# 目录不存在就手动建立
if not os.path.exists(输出目录):
    os.makedirs(输出目录)
if not os.path.exists(输入目录):
    os.makedirs(输入目录)  
#-- 输出文件 = 文件名防重_追加数字(输出文件)
 
# 获取待去重文件
待去重文件列表 = []
待去重文件列表 = [f"{输入目录}/{i}" for i in os.listdir(输入目录)]
#-- getDeepFilePaths(待去重文件列表,输入目录,"txt")
print(f"\n总共{len(待去重文件列表)}个文件")
 
 
# 实际处理
all_lines = []
文件个数 = 0
for 文件 in 待去重文件列表:
    文件个数 += 1
    print(f"\n处理第{文件个数}个文件")
 
    #-- 打点()
    # (1)读全部
    with open(文件) as f:
        data = f.read()
 
    # (2)正则分行
    regx = '''[\w\~`\!\@\#\$\%\^\&\*\(\)\_\-\+\=\[\]\{\}\:\;\,\.\/\<\>\?]+'''
    lines = re.findall(regx, data)
    all_lines.extend(lines)
    #-- 打点()
    #-- print(f"读取完毕,耗时:{计时()}")
 
 
# (3)集合去重
all_lines_set = set(all_lines)
#-- 打点()
#-- print(f"\n\n去重完毕,耗时:{计时()}")
 
# (4)循环写入
with open(输出文件,"a") as f_rst:
    for line in all_lines_set:
        f_rst.write(line + '\n')
#-- 打点()
#-- print(f"\n写入完毕,耗时:{计时()}")
 
 
#-- 打点()
#-- print(f"\n\n总耗时:{计时(0)}")
print("———— 结束 ————")

王晓博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python3 大文件去重的方法
喜欢 (0)
[wave460@126.com]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址