Python 如何在CSV文件中按行写入数据
我正在尝试在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
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)为每个文件名写入一行。