如何随机读取CSV两列数据?

时间:2019-05-12 14:19:21

标签: python csv

我想写一个可以随机分配座位的程序。名称和座位在CSV文件的两列中,我想随机选择它们并打印出来。我只会随机阅读一列。如何随机写入两列数据?

#read name column at random

with open('/home/name.csv', 'r') as fp:
     for l in fp:
      foo = list(fp)
      name = random.choice(foo)
      print(name)

#This is data in csv
column0  column1
Jacob      2A
Tony       3B
Emma       1C
Jack       5D
Ada        4A


现在,我想同时随机选择“名称”和“位置”并打印出来,但是我不知道该怎么写。

2 个答案:

答案 0 :(得分:0)

首先使用csv.reader使用csv模块打开csv文件,读取行并创建姓名和席位列表,然后通过random.choice从两者中随机选择

import csv
import random

names = []
seats = []
#Open csv file
with open('file.txt', 'r') as fp:
    #Read csv file
    reader = csv.reader(fp, delimiter=' ',skipinitialspace=True)
    #Skip header
    next(reader)
    #Iterate through rows and create names and seats array
    for row in reader:
        names.append(row[0])
        seats.append(row[1])

#Choose randomly from both of them
name = random.choice(names)
seat = random.choice(seats)

print(name, seat)

输出看起来像

Tony 5D
Emma 1C
...

如果您不希望有两个列表,则可以通过列表理解来读取所有行,并使用zip将名称和位置压缩在一起。

然后第一个元组包含所有名称,第二个元组包含所有席位,您可以从中随机选择

import csv
import random

rows = []
#Open csv file
with open('file.txt', 'r') as fp:
    #Read csv file
    reader = csv.reader(fp, delimiter=' ',skipinitialspace=True)
    #Skip header
    next(reader)
    #Iterate through rows, and zip names and seats together
    rows = list(zip(*[row for row in reader]))
    #[('Jacob', 'Tony', 'Emma', 'Jack', 'Ada'), ('2A', '3B', '1C', '5D', '4A')]

name = random.choice(rows[0])
seat = random.choice(rows[1])

print(name, seat)

答案 1 :(得分:0)

这是我的name.csv

Jacob, 2A
Tony, 3B
Emma, 1C
Jack, 5D
Ada, 4A

首先,我们需要将该数据导入python数据结构。最简单的是列表列表。如果您知道的话,也可以使用熊猫,但是我使用列表只是为了向您展示如何入门。

import csv
with open('name.csv') as f:
    reader = csv.reader(f)
    data = [row for row in reader]

现在我的data变量是:

[['Jacob', ' 2A'],
 ['Tony', ' 3B'],
 ['Emma', ' 1C'],
 ['Jack', ' 5D'],
 ['Ada', ' 4A']]

接下来,要选择随机行,我将使用python的random模块从行列表中获取随机行:

import random
random.choice(data) # Example output: ['Ada', ' 4A']

这将给我表格中的一行。您现在可以选择2列中的任意一列。

name = random.choice(data)[0] # First column
seat = random.choice(data)[1] # Second column