如何用Python从CSV文件中随机输出一整行列表?
解决随机输出CSV整行的问题
你遇到的问题根源是csv.reader返回的是迭代器,而非可直接用于random.choice的列表。直接对迭代器使用随机方法,只会取到每行的单个元素,而非完整一行。
修正后的代码
先将CSV所有行转为列表,再随机选取整行:
import csv import random with open("testing.csv", "r", encoding="utf-8") as x: # 把csv.reader的所有行转换为列表存储 rows = list(csv.reader(x)) # 随机选择一行 random_row = random.choice(rows) print(random_row)
代码说明
list(csv.reader(x))会把CSV的每一行都转为子列表,最终得到一个二维列表,结构如下:[['numbers', ' one', ' two', ' three', ' four', ' five'], ['words', ' nice', ' please', ' computer', ' television', ' nouse']]random.choice(rows)会从这个二维列表里随机挑选一个子列表(即完整的一行),完全保留该行元素的原有顺序。
如果你的CSV文件体积极大,不想一次性加载所有行到内存,可以采用蓄水池抽样的逐行随机方法,但对于小文件来说,上面的方案简单高效。
内容的提问来源于stack exchange,提问作者epzilon
相关产品推荐
相关产品推荐

