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

能否基于Token列合并两个TXT文件?附现有拼接代码

基于Token列合并两个TXT文件的解决方案

当然可以!你当前的代码是按行顺序直接拼接,但如果两个文件的Token行序不一致,这种方式就会出错。要实现基于Token列的匹配合并,核心思路是先把其中一个文件的内容以Token为键存入字典,再遍历另一个文件通过Token匹配对应内容,具体实现如下:

核心实现代码

# 第一步:将向量文件加载到字典,用Token作为唯一标识
vector_lookup = {}
with open('s1_5w10f_vectors.txt', 'r', encoding='utf-8') as vec_file:
    for line in vec_file:
        line = line.strip()
        if not line:
            continue
        # 拆分Token和后续向量部分,maxsplit=1确保Token含空格也能正确拆分
        token, vector_content = line.split(maxsplit=1)
        vector_lookup[token] = vector_content

# 第二步:遍历计数文件,匹配Token并合并内容
with open('s1_5w10f_vocab.txt', 'r', encoding='utf-8') as count_file, \
     open('/Users/dlhoffman/5w10f.txt', 'w', encoding='utf-8') as output_file:
    for line in count_file:
        line = line.strip()
        if not line:
            continue
        # 拆分Token和计数部分
        token, count_content = line.split(maxsplit=1)
        # 匹配对应的向量内容
        if token in vector_lookup:
            # 按「Token + 计数 + 向量」的格式写入
            output_file.write(f"{token} {count_content} {vector_lookup[token]}\n")
        else:
            # 可选:处理Token在计数文件但无对应向量的情况
            print(f"注意:Token '{token}' 未找到对应的向量,已跳过")

关键细节说明

  • 处理含空格的Token:用split(maxsplit=1)而不是普通的split(),确保即使Token本身包含空格,也能正确拆分出Token和后续内容
  • 编码问题:添加encoding='utf-8'避免中文或特殊字符出现乱码(如果你的文件是其他编码,替换成对应编码即可)
  • 空行处理:跳过空行避免出现无效的匹配和写入
  • 缺失值处理:代码中加入了缺失向量的提示,你也可以根据需求修改——比如给缺失的向量填充0或者空字符串,或者反过来遍历向量文件匹配计数

扩展场景:全量合并(保留所有Token)

如果需要保留所有在任一文件中出现的Token(不管是否在另一个文件中有匹配),可以用以下逻辑:

# 收集所有唯一Token
all_tokens = set()
# 先读取两个文件的Token
with open('s1_5w10f_vocab.txt', 'r', encoding='utf-8') as f:
    all_tokens.update(line.strip().split(maxsplit=1)[0] for line in f if line.strip())
with open('s1_5w10f_vectors.txt', 'r', encoding='utf-8') as f:
    all_tokens.update(line.strip().split(maxsplit=1)[0] for line in f if line.strip())

# 重新加载两个文件的字典
count_dict = {}
with open('s1_5w10f_vocab.txt', 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()
        if line:
            token, cnt = line.split(maxsplit=1)
            count_dict[token] = cnt

vector_dict = {}
with open('s1_5w10f_vectors.txt', 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()
        if line:
            token, vec = line.split(maxsplit=1)
            vector_dict[token] = vec

# 写入全量合并内容
with open('/Users/dlhoffman/5w10f_full.txt', 'w', encoding='utf-8') as f:
    for token in all_tokens:
        count = count_dict.get(token, "0")  # 缺失计数用0填充
        vector = vector_dict.get(token, "")  # 缺失向量用空字符串填充
        f.write(f"{token} {count} {vector}\n")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:52:18