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

Python实现跨文本文件比对去重并提取唯一用户名入库

文本比对去重提取用户名解决方案

场景与需求

  • file1.txt每行格式为username:password,示例内容:
    admin:2222
    admin:meunsm
    admin:12345
    stack:0000
    csanders:1111
    
  • file2.txt每行包含username:password片段,格式为source ip: source port > destination ip: destination port username:password,示例内容:
    192.168.0.114:1137   >   192.168.0.193:21 csanders:echo
    

需求:提取file1.txt中用户名未在file2.txt出现过的行对应的用户名,且最终用户名无重复,存入数据库。

原代码问题分析

  1. 判断逻辑错误:原代码用if line1 in line2判断,但file1的行是user:pass1,file2里是user:pass2,两者完全不同,导致判断失效,无法正确识别已出现的用户名。
  2. 无去重机制:直接追加提取的用户名,未处理重复项。
  3. 文件写入位置错误:写入操作放在外层循环内,导致重复写入内容。

修正后的代码

# 提取file2中所有出现过的用户名(存入集合自动去重)
existing_users = set()
with open('file2.txt', 'r') as f2:
    for line in f2:
        line = line.strip()
        if not line:
            continue
        # 分割行,取最后一段的用户名部分
        user_pass = line.split()[-1]
        username = user_pass.split(':')[0]
        existing_users.add(username)

# 处理file1,筛选未在file2出现的用户名(集合自动去重)
target_users = set()
with open('file1.txt', 'r') as f1:
    for line in f1:
        line = line.strip()
        if not line:
            continue
        username = line.split(':')[0]
        if username not in existing_users:
            target_users.add(username)

# 写入结果文件
with open('newfile.txt', 'w') as newfile:
    # 按字母排序输出,可根据需求删除sorted()
    for user in sorted(target_users):
        newfile.write(f"{user}\n")

# 存入数据库示例(以SQLite为例)
import sqlite3
conn = sqlite3.connect('user_db.db')
cursor = conn.cursor()

# 创建用户表(主键约束保证用户名不重复)
cursor.execute('''CREATE TABLE IF NOT EXISTS non_existing_users
                  (username TEXT PRIMARY KEY NOT NULL)''')

# 批量插入数据
for user in target_users:
    try:
        cursor.execute("INSERT INTO non_existing_users (username) VALUES (?)", (user,))
    except sqlite3.IntegrityError:
        # 用户名已存在时跳过
        pass

conn.commit()
conn.close()

代码关键说明

  • 使用**集合(set)**存储用户名:天然实现去重,且成员查询效率远高于列表。
  • 正确提取用户名:不管file2中对应密码是什么,只要用户名出现就标记为已存在。
  • 先收集所有目标用户再写入:避免重复写入文件,提升效率。
  • 数据库层兜底:通过主键约束再次确保用户名不重复,防止意外重复数据。

内容的提问来源于stack exchange,提问作者AHSAN YAZDANI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:16:07