You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

50G大TSV文件处理:如何删除邮箱@前的点保留后缀mail.com的点

问题本质

原有脚本不加区分替换了全文所有.,包括邮箱域名部分的点,后续用sed修正的逻辑不仅多了一次全文件IO开销,还仅适用于后缀为mail.com的场景,通用性差,处理50G级大文件时效率极低。

优化方案

方案1:Python原生实现(无系统依赖)

优化逻辑:

  • 放弃全量加载50G文件到内存的操作,改为逐行读取处理,内存占用稳定在MB级
  • 按@拆分邮箱内容,仅对@前的用户名部分做删除点操作,后缀部分完全保留,不存在误改后缀的问题
  • 一次IO即可完成全部处理,无需二次修改输出文件

代码示例:

import sys

with open('file.tsv', 'r', encoding='utf-8') as in_file, open('newFile.tsv', 'w', encoding='utf-8') as out_file:
    for line in in_file:
        stripped = line.strip()
        # 空行或不符合邮箱格式的行直接保留
        if not stripped or '@' not in stripped:
            out_file.write(line)
            continue
        # 仅拆分一次,避免后缀中存在@的异常场景
        username, suffix = stripped.split('@', 1)
        username = username.replace('.', '')
        # 保留原始行的换行符
        out_file.write(f"{username}@{suffix}\n")

方案2:纯Linux单行命令(大文件处理效率更高)

对于50G级的大文件,直接用awk处理的性能远高于Python脚本,一次IO即可完成所有操作:

awk -F '@' '{gsub(/\./,"",$1); print $1"@"$2}' file.tsv > newFile.tsv

该命令会自动按@拆分每行,仅替换第一部分(用户名)中的所有点,后缀部分完全保留,支持所有合法邮箱后缀格式,通用性极强。

内容的提问来源于stack exchange,提问作者Younes Zaidi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:57:01