/ python

Python 创建字典文件

前提

首先简单的介绍下用到的2个库:stringitertools

  • 介绍 string 模块中几个有用的全局变量:

    • string.letters: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    • string.printable: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c
    • string.lowercase: abcdefghijklmnopqrstuvwxyz
    • string.uppercase: ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • itertools 是python的循环器库。循环器是对象的容器,包含有多个对象。itertools.product() 的结果为笛卡尔积,相当于一个嵌套循环。itertools.chain()将多个循环器结合成单个循环器。更多关于 itertools

代码

# !/usr/bin/env python
# coding:utf-8

import sys
import string
import itertools

def get_strings():
    chars = string.printable[:10]
    strings = []
    for i in xrange(min, max + 1):
        strings.append((itertools.product(chars, repeat=i),))
    return itertools.chain(*strings)


def make_dict(file, list_str):
    f = open(file, 'a')
    for x in list_str:
        print x
        for y in x:
            f.write("".join(y))
            f.write('\n')
    f.close()
    print 'Done'


if __name__ == '__main__':
    if len(sys.argv) == 4:
        try:
            min = int(sys.argv[1])
            max = int(sys.argv[2])
        except:
            print "wrong"
            sys.exit(0)

        if min <= max:
            list_str = get_strings()
            file = str(sys.argv[3])
            make_dict(file, list_str)
            sys.exit(0)
    else:
        print "missing some argvs"

结果

这里我们的脚本文件为dict.py,后面的参数分别为密码的最小长度、密码的最大长度以及保存的字典文件名。上面的例子运行成功后会在脚本文件同级目录下生成一个dict.txt的字典文件,其中包含6位随机纯数字的所有组合。