选择csv文件中的行并将其写入另一个csv文件中

时间:2015-04-07 01:31:45

标签: python csv

我有一个包含2列的csv文件(标题是值,图像)。值列表包含按升序排列的值(0,25,30 ...),图像列表包含图像路径(例如X.jpg)。总行数为81,包括标题(即有80个值和80个图像)

screenshot of a couple of columns in a spreadsheet

我想把这个列表分为四种方式。基本上,这个想法就是拥有一对图像。

在第一组中,我拍摄了每两个近行(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

以下是此输出:

enter image description here

我想保持这个概念与其余3组相似(将新的csv文件写入配对图像并有两列),但只是增加传播。也就是说,每5行(即2 + 7等),每7(即2 + 9等)和每9行组合在一起。很想知道如何执行它的方向。我对第一组感到很幸运(刚刚了解了CodeAcademy课程中的余数/分频器选项,但无法想到其他组的想法。

1 个答案:

答案 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)