我是python的新手,很想得到一些帮助。
我有一个包含2列的csv文件,请注意:
1 A
2 B
3 C
4 D
我的目标是使用python来打开"该文件,读取它,随机化两个列表的顺序(即1与C相同,2与D等),然后将新的随机列表保存在不同的csv文件中。
谢谢,
编辑:
import csv
import random
f=open('my_file.csv')
csv_f=csv.reader(f)

我读了一些关于作家的东西。但不确定如何使用这些功能..
编辑2: 有人刚刚发表了一篇好评,但出于某种原因,我现在无法看到它。唯一的问题是我需要保持列标题完整,它们不能随机化。代码如下:
import csv
import random
with open ("my_file") as f:
l=list(csv.rader(ff))
random.shuffle(l)
with open("random.csv", "W") as f:
csv.writer(f).writerows(f)

答案 0 :(得分:2)
您可以将行读作列表,提取两列,然后将每个列拖放,然后将列压缩在一起,最后将结果写入新的csv文件:
import csv
import random
with open("input.csv") as f:
r = csv.reader(f)
header, l = next(r), list(r)
a = [x[0] for x in l]
random.shuffle(a)
b = [x[1] for x in l]
random.shuffle(b)
with open("random.csv", "wb") as f:
csv.writer(f).writerows([header] + zip(a, b))
答案 1 :(得分:0)
HBS,你的代码的问题是它试图改变行顺序而不是单独的列。
您可以将每个列读取到单独的列表中,然后应用shuffle,然后将两个列表组合在一起以形成行列表,然后再将它们写入输出文件。
要在读取输入文件后维护标题,请从结果列表中弹出第一个元素,然后在重排后重新组合。
以下是说明步骤的代码:
import random
import csv
# read the data into lists
with open('input.csv', 'r') as myfile:
csvreader = csv.reader(myfile, delimiter=' ')
list1 = []
list2 = []
for row in csvreader:
a, b = row
list1.append(a)
list2.append(b)
# pop the first element (headers)
title1, title2 = list1.pop(0), list2.pop(0)
# shuffle the list
random.shuffle(list1)
random.shuffle(list2)
# add the titles back:
list1 = [title1] + list1
list2 = [title2] + list2
# write rows to output file
with open('output.csv', 'w') as oput:
output_rows = list(zip(list1, list2))
csvwriter = csv.writer(oput, delimiter=' ')
csvwriter.writerows(output_rows)
答案 2 :(得分:0)
也许不使用csv
模块。 <怎么样
创建两个空列表,一个用于存放数字,另一个用于存放字母。
打开文件
对于文件中的每一行
分割线
将号码添加到号码列表
将字母添加到字母列表
随机播放号码列表
按顺序从每个列表中取一个项目,然后将它们写入文件
重复
内置函数zip
应该有助于最后一点。
答案 3 :(得分:0)
查看csvshuf的源代码:
reader = csv.reader(args.infile, delimiter=args.delimiter, quotechar=args.quotechar)
"""Get the first row and use it as column headers"""
headers = next(reader)
"""Create a matrix of lists of columns"""
table = []
for c in range(len(headers)):
table.append([])
for row in reader:
for c in range(len(headers)):
table[c].append(row[c])
cols = args.columns
for c in cols:
args.shuffle(table[c - 1])
"""Transpose the matrix"""
table = zip(*table)
writer = csv.writer(sys.stdout, delimiter=args.output_delimiter)
writer.writerow(headers)
for row in table:
writer.writerow(row)