不幸的是,我在编程方面没有太多经验,但我希望用Python实现以下目标(当有人帮助我做和理解时,我会非常高兴):
我有两个csv文件,比如list1.csv和list2.csv,我希望在以下方式随机随机播放后将它们组合在一个新的csv中:假设list1.csv具有以下结构:
Header1 Header2
A 1
B 2
C 3
… …
我想要将两列的元素(但不是标题)混洗,但要将每行中的元素保持在一起,例如:
Header1 Header2
B 2
A 1
C 3
… …
对于list2.csv,我想做同样的事情,它有相同的结构,即:
Header3 Header4
a x1
b x2
c x3
… …
最后,我想将它们粘合在一个新的,单独的csv中(csv中的各个项目是实验的刺激),结果如下:
Header1 Header2 Header3 Header4
B 2 c x3
C 3 a x1
A 1 b x2
… … … …
我想,我必须做以下事情(基于我用Google搜索的内容):
#I actually do not know why I write this :)
import random
#I guess this activates the import of a csv :)
import csv
#Import the first csv file and store it in a variable
#I also want to tell Python that I want him to ignore the headers, but later on I need them back somehow :o
list1=list(csv.reader(open('list1.csv', header=None)))
正如你所说,我对此非常不熟悉:(我想我将来需要学习一些Python!
根据我的阅读,我认为我需要提取行并将其与zip()
粘合在一起,然后使用random.shuffle()
。
我希望我清楚自己的目标是什么,我会非常感谢你们的帮助:)
答案 0 :(得分:0)
我是这样做的。
import random
import csv
list1 = list(csv.reader(open('list1.csv')))
list2 = list(csv.reader(open('list2.csv')))
header1, header2 = list1.pop(0), list2.pop(0)
random.shuffle(list1)
random.shuffle(list2)
list1 = [header1]+list1
list2 = [header2]+list2
listout = [list1[i] + list2[i] for i in range(len(list1))]
outputwriter = csv.writer(open("listout.csv", "wb"))
outputwriter.writerows(listout)
逐行:
import random
导入随机库,其中包含有用的函数,如random.shuffle。不确定你是否知道库是什么,但基本上他们添加了你可以使用的某些函数和类。
import csv
导入csv库。
list1 = list(csv.reader(open('list1.csv')))
list2 = list(csv.reader(open('list2.csv')))
读取两个文件的内容,并将每一行作为列表的元素。
header1, header2 = list1.pop(0), list2.pop(0)
将标题(列表的第一个元素)从列表中取出并存储起来供以后使用。
random.shuffle(list1)
random.shuffle(list2)
将列表随机排列。
list1 = [header1]+list1
list2 = [header2]+list2
将标题放回列表的前面。你不能使用+ =因为这会将它们放在列表的后面。您需要将它们放在括号中,因为它们是一个列表,所以如果将它们直接添加到另一个列表中,header1的每个元素将成为一个单独的元素,而不是作为列表保留在list1中,这是我们想要的,因为这是编写csv所需的格式。
listout = [list1[i] + list2[i] for i in range(len(list1))]
这是一个列表理解,它将list1的每个元素与list2的元素相加,将它们连接起来形成一个包含所有4列的列表,
outputwriter = csv.writer(open("listout.csv", "wb"))
outputwriter.writerows(listout)
这些在listout.csv上打开一个csv编写器,然后将listout写入它。
答案 1 :(得分:0)
只需将csvs中的数据添加到单个列表中,然后将其随机播放
>>> import csv, pprint
>>> from random import shuffle
>>> allData = []
>>>
>>> with open('list1.csv', 'rb') as f:
... reader = csv.reader(f)
... next(reader)
... for row in reader:
... allData += [row]
...
['Header1', 'Header2']
>>> with open('list2.csv', 'rb') as f:
... reader = csv.reader(f)
... next(reader)
... for row in reader:
... allData += [row]
...
['Header3', 'Header4']
>>> shuffle(allData)
>>> pprint.pprint(allData)
[['b', 'x2'], ['a', 'x1'], ['A', '1'], ['B', '2'], ['C', '3'], ['c', 'x3']]