python3 大文件去重的方法
admin
2023-07-30 19:50:48
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("———— 结束 ————")

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...