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

如何用itertools生成全密码组合并拆分输出为指定大小文件?

解决方法

首先修正你原代码的核心问题,再实现按3GB拆分输出文件的逻辑:

1. 修正原代码的关键错误

你的代码没有指定itertools.permutations的长度参数,导致生成了所有长度的单词排列(从1个单词到全列表单词的排列),这是文件体积爆炸的主要原因。另外readlines()会保留每行的换行符,需要先清理:

  • 读取密码列表时,用strip()去掉每行的换行和空白字符
  • 明确指定permutations的长度为2,只生成两个单词的有序组合

2. 实现按3GB拆分输出文件

通过跟踪当前输出文件的大小,达到阈值时切换新文件,确保不遗漏任何组合:

完整代码示例

import itertools

# 配置参数
PASSWORD_FILE = "passwords.txt"
TARGET_SIZE = 3 * 1024 * 1024 * 1024  # 3GB,单位字节
file_counter = 1
current_file = open(f"combinations_{file_counter}.txt", "w", encoding="utf-8")
current_size = 0

# 读取并清理密码列表
with open(PASSWORD_FILE, "r", encoding="utf-8") as f:
    # 过滤空行,清理每行的换行符
    password_list = [line.strip() for line in f if line.strip()]

# 生成两个单词的有序组合(排列)
for pair in itertools.permutations(password_list, 2):
    # 拼接组合字符串,末尾加换行符
    combo = ''.join(pair) + "\n"
    # 计算当前字符串的字节数(utf-8编码下准确统计)
    combo_size = len(combo.encode("utf-8"))
    
    # 如果写入当前字符串会超过目标大小,切换新文件
    if current_size + combo_size > TARGET_SIZE:
        current_file.close()
        file_counter += 1
        current_file = open(f"combinations_{file_counter}.txt", "w", encoding="utf-8")
        current_size = 0
    
    # 写入内容并更新当前文件大小
    current_file.write(combo)
    current_size += combo_size

# 关闭最后一个文件
current_file.close()

代码说明

  • 参数配置:TARGET_SIZE设置为3GB的字节数,可根据实际需求微调
  • 密码列表清理:过滤空行并去除换行符,避免生成带无效换行的组合
  • 文件切换逻辑:每次写入前检查当前文件剩余容量,不足则创建新文件继续写入,保证拆分的文件大小接近3GB且无遗漏
  • 编码处理:明确指定utf-8编码,避免跨系统编码问题,同时准确计算字符串的字节占用

可选调整

如果目标密码是不考虑顺序的两个单词组合(即ab和ba视为同一组合),将itertools.permutations替换为itertools.combinations即可,组合数会减少一半,进一步压缩文件体积。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:31:23