创建CSV文件时遇到的问题

时间:2018-12-11 08:29:22

标签: python csv

我要创建一个csv文件,它包含两列,第一列是图像的标签,第二列是图像的地址,以下是我的代码:

import os
import os.path as osp
import sys
import xml.etree.ElementTree as ET
import csv

data_dir = '/home/xieyangyang/Downloads/SiamFC/Data/VID/train/a'
video_names = os.listdir(data_dir)

for idx, video in enumerate(video_names):
    video_path = osp.join(data_dir, video)
    file_list = os.listdir(video_path)
    idex = idx
    for item in file_list:
        with open("test.csv","a+") as csvfile:
            idex = str(idex)
            src = osp.join(video_path, item)#addres
            #print(src)
            #print(idex) 
            writer = csv.writer(csvfile)
            writer.writerows([idex, src])

但是csv非常不正常:

['2', '0', '1']
['/', 'h', 'o', 'm', 'e', '/', 'x', 'i', 'e', 'y', 'a', 'n', 'g', 'y', 'a', 'n', 'g', '/', 'D', 'o', 'w', 'n', 'l', 'o', 'a', 'd', 's', '/', 'S', 'i', 'a', 'm', 'F', 'C', '/', 'D', 'a', 't', 'a', '/', 'V', 'I', 'D', '/', 't', 'r', 'a', 'i', 'n', '/', 'a', '/', 'c', 'a', 'r', '3', '7', '/', '2', '0', '1', '_', '0', '0', '5', '0', '7', 'v', '.', 'j', 'p', 'g']

但我想要的是:

['1496', 'bounding_box_train/1496_c1s6_022396_05.jpg']

我该怎么办?

2 个答案:

答案 0 :(得分:4)

第一个问题:在外循环中,您正在一次读取图像,而在其中,您一次又一次地为读取的每个图像打开csv文件。

应该怎么做:

with open("test.csv","a+") as csvfile:
    writer = csv.writer(csvfile)
    for idx, video in enumerate(video_names):
        ... write data ...

第二个问题:您应该使用writer.writerow([idex, src])而不是writer.writerows([idex, src])(注意“ s”)。第二行(writerows)认为,您给它提供了两行,其中之一是 idex ,另一行是 src

答案 1 :(得分:2)

如果您删除多余的“ s”,它将起作用

        writer.writerows([idex, src])

应该是

writer.writerow([idex, src])

您正在使用的函数是可迭代的,这就是它在输出文件中逐字符写入char的原因。