我有一个包含2列的csv文件(标题是值,图像)。值列表包含按升序排列的值(0,25,30 ...),图像列表包含图像路径(例如X.jpg)。总行数为81,包括标题(即有80个值和80个图像)
我想把这个列表分为四种方式。基本上,这个想法就是拥有一对图像。
在第一组中,我拍摄了每两个近行(2 + 3,4 + 5 ......)的图像部分,并将它们写入新的csv文件中。我将每个图像写在不同的列中。这是代码:
import csv
f = open('random_sorted.csv')
csv_f = csv.reader(f)
i = 0
prev = ""
#open csv file for writing
with open('first_group.csv', 'wb') as test_file:
csv_writer = csv.writer(test_file)
csv_writer.writerow(["image1"] + ["image2"])
for row in csv_f:
if i%2 == 0 and i!=0:
#print prev + "," + row[1]
csv_writer.writerow([prev] + [row[1]])
else:
prev = row[1]
i = i+1
以下是此输出:
我想保持这个概念与其余3组相似(将新的csv文件写入配对图像并有两列),但只是增加传播。也就是说,每5行(即2 + 7等),每7(即2 + 9等)和每9行组合在一起。很想知道如何执行它的方向。我对第一组感到很幸运(刚刚了解了CodeAcademy课程中的余数/分频器选项,但无法想到其他组的想法。
答案 0 :(得分:1)
首先收集列表中csv文件中的所有行:
with open('random_sorted.csv') as csvfile:
csv_reader = csv.reader(csvfile, delimiter=';')
headers = next(csv_reader)
rows = [row for row in csv_reader]
然后设置所需的步长(5,7或9)并根据行列表中的索引识别行:
with open('first_group.csv', 'wb') as test_file:
csv_writer = csv.writer(test_file)
csv_writer.writerow(["image1"] + ["image2"])
step_size = 7 # set step size here
seen = set() # here we remember images we've already seen
for x in range(0, len(rows)-step_size):
img1 = rows[x][1]
img2 = rows[x+step_size][1]
if not (img1 in seen or img2 in seen):
csv_writer.writerow([img1, img2])
seen.add(img1)
seen.add(img2)