如何从CSV文件中获取随机行并返回对应行索引?
CSV随机选取行并获取对应索引实现方案(仅使用标准库csv、random)
实现逻辑
- 一次性读取CSV所有行存入列表,利用列表的下标对应原始行的索引位置
- 调用random库的无重复随机采样方法生成目标索引
- 关联索引与对应行内容输出
- 兼容带表头/不带表头的CSV格式
可直接运行的代码示例
import csv import random # 自定义配置项 csv_path = "你的目标文件路径.csv" pick_num = 3 # 需要随机选取的行数 csv_has_header = True # 你的CSV文件第一行是否为表头 # 读取CSV全量内容 with open(csv_path, "r", encoding="utf-8") as f: csv_reader = csv.reader(f) all_rows = list(csv_reader) # 区分表头与数据行 data_start_idx = 1 if csv_has_header else 0 data_rows = all_rows[data_start_idx:] # 校验选取数量合法性 if pick_num > len(data_rows): raise Exception(f"选取行数不能超过CSV总数据行数,当前总数据行数为{len(data_rows)}") # 生成无重复的随机数据行索引 random_indexes = random.sample(range(len(data_rows)), pick_num) # 打印结果 for idx in random_indexes: # 如需原始文件物理行号(第一行计数为1)可使用 original_line = idx + data_start_idx + 1 # 如需数据行在数据集中的下标(从0开始)可直接使用 idx print(f"对应索引:{idx},行内容:{data_rows[idx]}")
关键说明
- 无重复选取使用
random.sample()方法,如果业务允许重复选取同一条数据,可以替换为random.choices(range(len(data_rows)), k=pick_num) - 索引计数规则可根据作业要求调整,默认提供数据下标、原始文件物理行号两种计算方式
- 若CSV使用制表符等特殊分隔符,可在
csv.reader()中传入delimiter="\t"参数适配
内容的提问来源于stack exchange,提问作者ARTICAT18
相关产品推荐
相关产品推荐

