在各类线上或线下活动中,主办方常把抽奖券编号和参与者信息导出为CSV文件,随后需要从这些记录里挑出幸运中奖者。使用Python可以非常方便地完成这件事,既能保证随机性,也能避免人工抽签的不透明。下面我们一步步实现一个读取CSV并随机抽取中奖者的小工具。

准备CSV抽奖券文件
假设我们有一个名为 tickets.csv 的文件,内容包含券号与姓名两列,示例如下:
ticket_id,name 1001,张三 1002,李四 1003,王五 1004,赵六
我们将基于这个结构编写读取与抽取逻辑。
使用Python读取CSV数据
Python内置的 csv 模块可以稳妥地解析带引号或逗号的数据。下面的代码演示如何把每一行转成字典并存入列表:
import csv
def load_tickets(path):
# 打开CSV文件并读取为字典列表
with open(path, mode='r', encoding='utf-8') as f:
reader = csv.DictReader(f)
rows = [row for row in reader]
return rows
tickets = load_tickets('tickets.csv')
print('共加载抽奖券:', len(tickets))
随机抽取中奖者
如果只抽一名中奖者,用 random.choice 即可;若要抽多名且不重复,用 random.sample 更合适。注意在抽取前最好先校验数据不为空。
import random
def pick_winners(tickets, count=1):
if not tickets:
raise ValueError('抽奖券列表为空')
if count == 1:
return [random.choice(tickets)]
# 抽取不重复的多名中奖者
return random.sample(tickets, k=min(count, len(tickets)))
winners = pick_winners(tickets, count=2)
for w in winners:
print('中奖券号:', w['ticket_id'], '姓名:', w['name'])
完整可运行示例
把前面内容合并,就得到一个简单脚本。你可以修改 count 参数控制中奖人数。
import csv
import random
def load_tickets(path):
with open(path, mode='r', encoding='utf-8') as f:
reader = csv.DictReader(f)
return [row for row in reader]
def pick_winners(tickets, count=1):
if not tickets:
raise ValueError('抽奖券列表为空')
if count == 1:
return [random.choice(tickets)]
return random.sample(tickets, k=min(count, len(tickets)))
if __name__ == '__main__':
data = load_tickets('tickets.csv')
result = pick_winners(data, count=1)
for item in result:
print('恭喜中奖:', item['name'], '券号', item['ticket_id'])
注意事项
- 确保CSV文件路径正确,编码一般为 utf-8 避免中文乱码。
- 若抽奖券含重复姓名但不同券号,random.sample 按行抽取不会重复同一行。
- 对大型文件可改用逐行读取,不必一次性载入内存。
通过上述方法,你就能用Python快速从CSV抽奖券中公平地选出中奖者,无需依赖第三方抽奖平台。