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

如何用Pandas抽取随机Steam密钥并移除,同时记录已抽取项?

解决方案:Steam密钥随机抽取与管理

完整实现代码

结合你的需求,修改后的代码可直接实现三个核心功能,同时保证输出简洁:

import pandas as pd

# 读取原始密钥列表
df = pd.read_csv('./testCSV.csv')
# 初始化已抽取密钥的DataFrame,结构与原始数据一致
used_df = pd.DataFrame(columns=df.columns)

# 随机抽取一行(若需一次抽多个,可调整sample的n参数)
random_row = df.sample()

# 1. 仅打印纯密钥字符串
key_str = random_row['Key'].iloc[0]
print(f"抽取的Steam密钥:{key_str}")

# 2. 从原始DataFrame中永久移除该行
df.drop(random_row.index, inplace=True)

# 3. 将抽取的行添加到已抽取列表
used_df = pd.concat([used_df, random_row], ignore_index=True)

# 可选:将更新后的列表写回文件,实现持久化保存
df.to_csv('./testCSV.csv', index=False)
used_df.to_csv('./used_keys.csv', index=False)

关键细节说明

  • 纯密钥输出:通过iloc[0]直接定位抽取行的Key列值,避免索引和额外信息干扰;也可使用random_row['Key'].squeeze()达到同样效果。
  • 永久移除行:利用drop()方法删除抽取行对应的索引,inplace=True直接修改原始DataFrame,最后通过to_csv写回文件完成持久化。
  • 记录已抽取密钥:初始化与原始数据同结构的空DataFrame,用pd.concat将抽取行追加进去,ignore_index=True重置索引避免混乱。

优化与扩展建议

  • 数据安全备份:每次运行前复制原始CSV文件做备份,防止误操作导致数据丢失。
  • 状态持久化:若不想频繁读写CSV,可使用pickle序列化保存df和used_df的状态,下次运行直接加载:
    # 保存状态
    import pickle
    with open('key_state.pkl', 'wb') as f:
        pickle.dump((df, used_df), f)
    # 加载状态
    with open('key_state.pkl', 'rb') as f:
        df, used_df = pickle.load(f)
    
  • 异常处理:添加判断逻辑,当df为空时提示"已无可用密钥",避免程序报错。
  • 轻量替代方案:对于小规模密钥列表,用Python内置的csv模块和random库即可实现,代码更轻量:
    import csv
    import random
    import os
    
    # 读取密钥列表
    keys = []
    with open('./testCSV.csv', 'r', newline='') as f:
        reader = csv.DictReader(f)
        keys = list(reader)
    
    if not keys:
        print("已无可用密钥")
    else:
        # 随机抽取
        selected = random.choice(keys)
        print(f"抽取的Steam密钥:{selected['Key']}")
        # 移除当前密钥
        keys.remove(selected)
        # 写入剩余密钥
        with open('./testCSV.csv', 'w', newline='') as f:
            writer = csv.DictWriter(f, fieldnames=['Product', 'Key'])
            writer.writeheader()
            writer.writerows(keys)
        # 写入已抽取密钥
        with open('./used_keys.csv', 'a', newline='') as f:
            writer = csv.DictWriter(f, fieldnames=['Product', 'Key'])
            # 文件为空时写入表头
            if os.stat('./used_keys.csv').st_size == 0:
                writer.writeheader()
            writer.writerow(selected)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:40:32