[英]Printing random names on a file
我想知道如何從文件中打印隨機名稱。 基本上有3個文件,分別是姓,男名和女名。 這些文件不僅僅是名稱。 他們也有數字。 這是文件外觀的示例:
SMITH 1.006 2,501,922 1
JOHNSON 0.81 2,014,470 2
WILLIAMS 0.699 1,738,413 3
JONES 0.621 1,544,427 4
BROWN 0.621 1,544,427 5
DAVIS 0.48 1,193,760 6
MILLER 0.424 1,054,488 7
WILSON 0.339 843,093 8
MOORE 0.312 775,944 9
我希望輸出打印出姓氏和名字(沒有數字)這是到目前為止的代碼。 它可以工作,但是會打印出數字。
隨機導入
def random_names(surname,male_names,female_names,integer):
names1 = open('surnames.txt', 'r')
names2 = open('malenames.txt', 'r')
names3 = open('femalenames.txt', 'r')
read1=names1.read().split()
read2=names2.read().split()
read3=names3.read().split()
gender_options = ('male', 'female')
count = 0
while count<integer:
gender_pick=random.choice(gender_options)
if gender_pick == 'male':
first_name=random.choice(read2)
elif gender_pick == 'female':
first_name=random.choice(read3)
last_name=random.choice(read1)
print (first_name,last_name)
count = count+1
random_names('surnames.txt', 'malenames.txt', 'femalenames.txt',10)
即使將其修改為read2 [0] read1 [0] read3 [0],它也只是打印出字母。
J M
S H
E T
R I
A I
M H
J S
A I
M I
Y S
定義一個函數get_names(filename)
從文件中提取所有名稱,例如:
def get_names(filename):
with open(filename) as file:
return [line.split(None, 1)[0] for line in file if line.strip()]
單獨測試它,然后在腳本中使用它,例如:
#!/usr/bin/env python
import itertools
import random
def generate_random_names(surnames, male_names, female_names,
choose=random.choice):
while True:
# make male/female names equally likely
forename = choose(choose([male_names, female_names]))
yield forename, choose(surnames)
name_lists = map(get_names, ['surnames.txt', 'malenames.txt', 'femalenames.txt'])
fullnames = generate_random_names(*name_lists)
print(list(itertools.islice(fullnames, 50)))
此代碼可能會生成重復的全名。 要從總體中選擇k
唯一的隨機元素,請改用random.sample()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.