Python 如何在CSV文件中按行写入数据

Python 如何在CSV文件中按行写入数据,python,csv,Python,Csv,我正在尝试在csv文件中写入数据 我是这样写的: 617.png 0988.png 0850.png 0824.png 0536.png 0 但是我想像这样在文件中写入数据 617.png 0 988.png 0 850.png 0 824.png 0 536.png 0 有什么帮助吗?这是我的代码: import os import cvutils import csv dir_unknown = 'UntitledFolder' trainingSet='/home/irum/Desk

我正在尝试在csv文件中写入数据

我是这样写的:
617.png 0988.png 0850.png 0824.png 0536.png 0

但是我想像这样在文件中写入数据

617.png 0
988.png 0
850.png 0
824.png 0
536.png 0
有什么帮助吗?这是我的代码:

import os
import cvutils 
import csv 
dir_unknown = 'UntitledFolder'
trainingSet='/home/irum/Desktop/CLUSTERING/UntitledFolder/UntitledFolder1'
#Create CSV File
images_names = []
SEPARATOR=" "

print"start"
label = 0
for (dirname, dirnames, filenames) in os.walk(dir_unknown):
    print"dd"
    for subdirname in dirnames:
        subject_path = os.path.join(dirname, subdirname)
        print "subject_path",subject_path
        for filename in os.listdir(subject_path):
        abs_path = "%s" % (filename)
        images_names.append("%s%s%d" % (abs_path,SEPARATOR,label))
        with open('class_train22', 'wb') as myfile:
            wr = csv.writer(myfile,delimiter=',',quotechar='\\',quoting=csv.QUOTE_MINIMAL, lineterminator='\r\n')
            wr.writerow(images_names )
        label = label + 1

首先,您的csv文件只有一行,因为您正在打开同一个文件进行写入(截断,而不是追加)

您必须在开始时创建一个
with
块,打开文件并一次性创建csv对象,所有其他语句都进入
with

csv
文件必须用空格分隔。如果在文件名中发现空格,则将进行引用,无需执行任何其他操作

with open('class_train22', 'wb') as myfile:  # python 2 only
#with open('class_train22', 'w',newline='') as myfile:  # python 3 only

    wr = csv.writer(myfile,delimiter=' ',quotechar='\\',quoting=csv.QUOTE_MINIMAL)
然后,每个文件名+索引对写一行,作为列表
csv
模块为您处理分隔/报价,无需格式化字符串

内部循环如下所示:

    for (dirname, dirnames, filenames) in os.walk(dir_unknown):
        for subdirname in dirnames:
            subject_path = os.path.join(dirname, subdirname)
            for filename in os.listdir(subject_path):
                wr.writerow([filename,label])
                label += 1

您只需调整标签的增量即可,因为您似乎希望在任何地方都为0(这有什么用),而在这里,您将得到所有目录的所有文件的绝对数增量。

执行此操作
图像\u名称。追加(“%s%s%d\n”%(abs\u路径、分隔符、标签))
您正在一次性写入所有文件名。您需要在代码中找到一个位置来迭代文件名,并对每个文件名调用
writerow
一次,而不是构建一个
images\u名称的列表
,在os.listdir(subject\u path)中反转文件名的
和带有open('class\u train22',wb')的
作为myfile:
parts to 1)以写入模式打开文件,2)为每个
文件名写入一行。