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

Python从CSV文件随机抽取单个学生姓名 解决文件无len()报错问题

问题原因

你遇到的报错是因为csv.reader返回的是迭代器对象,不是可随机访问的序列结构:

  • random.shuffle()要求输入对象支持长度查询(__len__方法)、元素赋值等可变序列特性,迭代器不满足该要求
  • 你在for循环里遍历迭代器的同时调用shuffle的逻辑也存在错误,迭代器只能遍历一次,遍历完成后就为空了

正确实现代码

思路非常直接:先把所有学生姓名读取存储到Python列表里,再用random.choice()直接从列表里随机选1个元素即可,无需手动shuffle:

import csv
import random

# 读取CSV存入学生列表
students = []
with open('1st_period.csv', 'r', encoding='utf-8') as student_csv_file:
    csv_reader = csv.reader(student_csv_file)
    next(csv_reader)  # 跳过表头行
    for row in csv_reader:
        if row:  # 跳过空行避免报错
            students.append(row[0])

# 随机抽取1名学生
if students:
    selected = random.choice(students)
    print(f"本次抽取到的朗读学生是:{selected}")
else:
    print("当前没有提交意愿的学生")

可选优化点

  • 如果需要连续抽取不重复的学生(直到所有学生都抽过一轮),可以先shuffle列表再按顺序取:
    random.shuffle(students)
    # 每次调用pop取一个,直到列表为空
    selected = students.pop()
    print(selected)
    
  • 如果后续CSV调整为两列存储姓和名,只要把row[0]改成f"{row[0]} {row[1]}"拼接即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:24:00