You need to enable JavaScript to run this app. Python如何对比两份文档匹配ID并打印文档B中对应的完整行
优惠活动
大模型
产品
解决方案
定价
更多

Python如何对比两份文档匹配ID并打印文档B中对应的完整行

报错原因

你写的第二种方案触发错误有两个核心原因:

  1. 变量名覆盖:你一开始把API返回的目标ID列表存在data变量,后续读文件时又执行data = f.readlines(),直接把原来的ID列表覆盖成了文件行列表
  2. 判断逻辑写反:line.__contains__(data)是判断列表类型的data是否存在于字符串类型的line中,类型不匹配才触发TypeError,正确逻辑应该是判断行内包含的ID是否存在于目标ID列表中
纯Python无第三方依赖实现方案

直接遍历文件匹配即可,用集合存目标ID可以大幅提升查找效率,写法如下:

import requests
# 第一步:获取目标ID列表,注意不要和其他变量重名,转成集合提升查找速度
response = requests.request("GET", url, headers=headers, data=payload)
target_ids = set(response.json()["SkinsPanelLayout"]["SingleItemOffers"])
# 如果你的ID列表是从shopid.txt读取,替换上面的代码为下面的即可:
# with open('shopid.txt', 'r', encoding='utf-8') as f:
#     target_ids = set(line.strip().strip("'\",[] ") for line in f if line.strip())

data_log = []
# 第二步:遍历文档B逐行匹配
with open('skin_database2.txt', 'r', encoding='utf-8') as f:
    for line in f:
        line_strip = line.strip()
        if not line_strip:
            continue
        # 提取每行末尾的ID(文档B所有行的ID都在最后一位)
        line_id = line_strip.split()[-1]
        if line_id in target_ids:
            print(line_strip)
            data_log.append(line_strip)
print(data_log)
优化后的Pandas实现方案

你原来的Pandas写法有问题:文档B的行长度不统一,部分行有3个字段,直接指定两列的列名会导致数据错位,优化后写法如下:

import pandas as pd
# 读取文档A的目标ID
df1 = pd.read_csv('shopid.txt', header=None, names=['id'])
target_ids = set(df1['id'].unique())
# 读取文档B的完整行,不拆分列
df2 = pd.read_csv('skin_database2.txt', header=None, names=['raw_line'])
# 提取每行末尾的ID
df2['line_id'] = df2['raw_line'].str.split().str[-1]
# 筛选匹配的行
match_lines = df2[df2['line_id'].isin(target_ids)]['raw_line'].to_list()
print(match_lines)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 15:15:02