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

如何用代码读取并统计超大规模列表?2000万条姓名数据处理需求

高效处理千万级姓名数据集的Python方案

嘿,针对你手里2000万条姓名的数据集处理需求,我推荐用Python来搞定——毕竟之前用bat和PowerShell卡壳了,Python处理这类大文本数据的效率和灵活性都靠谱得多。核心思路就是先统计所有姓名的出现次数,再筛选出符合次数要求的条目写入新文件,下面给你两种实用的代码方案,按需选择:

基础通用版(适合大多数场景)

这个方案用collections.Counter来统计次数,代码简洁易读,内存占用在合理范围内(毕竟姓名重复率通常不低):

from collections import Counter

def filter_names(input_file, output_file, min_count):
    # 第一步:统计所有姓名的出现次数
    print("正在统计姓名出现次数...")
    name_counter = Counter()
    with open(input_file, 'r', encoding='utf-8') as f:
        for line in f:
            name = line.strip()
            if name:  # 跳过空行,避免无效统计
                name_counter[name] += 1

    # 第二步:筛选符合条件的内容并写入新文件
    print(f"正在筛选出现次数≥{min_count}的姓名...")
    with open(output_file, 'w', encoding='utf-8') as out_f:
        # 如果你需要输出姓名+次数(CSV格式),用下面的代码
        out_f.write("姓名,出现次数\n")
        for name, count in name_counter.items():
            if count >= min_count:
                out_f.write(f"{name},{count}\n")
        
        # 如果你只需要输出姓名(每行一条),替换成这段:
        # for name, count in name_counter.items():
        #     if count >= min_count:
        #         out_f.write(f"{name}\n")

if __name__ == "__main__":
    # 这里直接修改成你的文件路径和阈值
    INPUT_FILE = "你的姓名文件.txt"  # CSV格式也可以,只要每行一条姓名
    OUTPUT_FILE = "筛选后的结果.csv"
    MIN_OCCURRENCE = 3  # 替换成你需要的x值

    filter_names(INPUT_FILE, OUTPUT_FILE, MIN_OCCURRENCE)
    print("处理完成!")

内存优化版(适合极端多重复率低的场景)

如果你的数据集里不同姓名特别多,担心内存不够用,可以用分两次遍历文件的方式,先统计次数再筛选,内存占用会更低:

def count_name_frequency(input_file):
    name_counts = {}
    with open(input_file, 'r', encoding='utf-8') as f:
        for line in f:
            name = line.strip()
            if name:
                name_counts[name] = name_counts.get(name, 0) + 1
    return name_counts

def write_filtered_names(input_file, output_file, name_counts, min_count):
    with open(input_file, 'r', encoding='utf-8') as f, open(output_file, 'w', encoding='utf-8') as out_f:
        out_f.write("姓名,出现次数\n")
        written_names = set()  # 避免重复写入同一个姓名
        for line in f:
            name = line.strip()
            if name and name not in written_names:
                count = name_counts.get(name, 0)
                if count >= min_count:
                    out_f.write(f"{name},{count}\n")
                    written_names.add(name)

if __name__ == "__main__":
    INPUT_FILE = "你的姓名文件.txt"
    OUTPUT_FILE = "筛选后的结果.csv"
    MIN_OCCURRENCE = 3

    print("正在统计姓名次数...")
    frequency_dict = count_name_frequency(INPUT_FILE)
    print("正在筛选并写入结果...")
    write_filtered_names(INPUT_FILE, OUTPUT_FILE, frequency_dict, MIN_OCCURRENCE)
    print("搞定啦!")

针对CSV格式的特殊处理

如果你的原始文件是带表头的CSV(比如第一列是姓名),可以用Python的csv模块更规范地处理:

import csv
from collections import Counter

def filter_csv_names(input_file, output_file, min_count):
    name_counter = Counter()
    # 读取CSV统计姓名次数
    with open(input_file, 'r', encoding='utf-8') as f:
        reader = csv.reader(f)
        next(reader)  # 跳过表头行
        for row in reader:
            if row:
                name = row[0].strip()
                name_counter[name] += 1

    # 写入筛选后的CSV结果
    with open(output_file, 'w', encoding='utf-8', newline='') as out_f:
        writer = csv.writer(out_f)
        writer.writerow(["姓名", "出现次数"])
        for name, count in name_counter.items():
            if count >= min_count:
                writer.writerow([name, count])

if __name__ == "__main__":
    filter_csv_names("原始姓名数据.csv", "筛选结果.csv", 3)

几个关键注意事项

  • 编码问题:如果你的文件不是UTF-8编码(比如Windows常用的GBK),把代码里的encoding='utf-8'改成encoding='gbk'即可,避免乱码。
  • 文件路径:如果文件不在代码同一目录,要写绝对路径,比如Windows的C:/Users/xxx/names.txt,或者Linux/macOS的/home/xxx/names.txt。
  • 性能说明:2000万条数据的处理时间大概在几分钟(取决于电脑CPU和硬盘速度),比bat/PowerShell快很多,因为Python的底层循环是C实现的,效率更高。

内容的提问来源于stack exchange,提问作者Aristocrat Cash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:17:58