我想写一个可以随机分配座位的程序。名称和座位在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
现在,我想同时随机选择“名称”和“位置”并打印出来,但是我不知道该怎么写。
答案 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