Python中的简单随机名称生成器

per*_*lis 6 python

我有一个包含第一个和最后一个'syllables'的文本文件,用[part1]和[part2]划分:

[part1]
Ae
Di
Mo
Fam
[part2]
dar
kil
glar
tres

我想要做的就是在[part1]和[part2]之间选择一条随机线,然后在[part2]和文件末尾之间选择另一条随机线,并将两者连接在一起(例如"Aedar","Moglar") )创建随机名称.

但是我不确定如何使用readline()有效地解析文本文件.有没有比顺序扫描每一行更好的方法,并将所有这些存储在一个列表中,从那里我可以选择一个随机元素?

AJ.*_*AJ. 11

将字典序列化(pickle)到文件中.

例:

# create the dict and save it to a file
d={
'part1':[
    'Ae',
    'Di',
    'Mo',
    'Fam',],
'part2':[
    'dar',
    'kil',
    'glar',
    'tres',],
}

import pickle
f=open('syllables','w')
pickle.dump(d,f)
f.close()


# read the dict back in from the file
f1=open('syllables','r')
sd=pickle.load(f1)
f1.close()

import random
first_part=sd['part1'][random.randint(0,len(sd['part1'])-1)]
second_part=sd['part2'][random.randint(0,len(sd['part2'])-1)]

print '%s%s'%(first_part,second_part)
Run Code Online (Sandbox Code Playgroud)


eum*_*iro 5

import random
parts = {}

with open('parts.txt', 'r') as f:
    currentList = []
    for line in f.readlines():
        line = line.strip()
        if line.startswith('[') and line.endswith(']'):
            currentList = []
            parts[line[1:-1]] = currentList
        else:
            currentList.append(line.strip())


for i in xrange(10):    
    print ''.join(random.choice(parts[partName]) for partName in sorted(parts))
Run Code Online (Sandbox Code Playgroud)

返回(随机):

Aekil
Didar
Mokil
Mokil
Moglar
Moglar
Diglar
Famdar
Famdar
Modar
Run Code Online (Sandbox Code Playgroud)

  • `'r'`是默认模式; 你可以省略它.`f.readlines()`读取内存中的整个文件; `for line in f:`可以用来代替.你可以在一行上写`currentLIne = parts [line [1:-1]] = []`.第一个`currentList`(在任何`'[part ...]'`行之前)没有添加到任何地方(值被丢弃). (2认同)