2017-01-02 1 views
-1

Ich versuche, Daten in CSV-Datei zu schreiben.Wie schreibe ich Daten in Zeilen in einer CSV-Datei

habe ich es wie folgt geschrieben:
617.png 0,988.png 0,850.png 0,824.png 0,536.png 0

Aber ich möchte die Daten in der Datei wie diese

617.png 0 
988.png 0 
850.png 0 
824.png 0 
536.png 0 

Jede Hilfe schreiben? dies ist mein Code:

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 
+1

Tun Sie dies 'images_names.append ("% s% s% d \ n "% (abs_path, SEPARATOR, Label))' – Prajwal

+0

Sie schreiben alle Dateinamen auf einmal. Sie müssen einen Platz in Ihrem Code finden, um über die Dateinamen zu iterieren und 'writerow' ** einmal pro Dateiname aufzurufen ** –

+0

Anstatt eine Liste von' images_names' zu erstellen, sollte es einfacher sein, den 'for filename in os umzukehren. listdir (subject_path): 'und das' mit open ('class_train22', 'wb') als myfile: 'Teile zu ** 1) ** öffne eine Datei im Schreibmodus, ** 2) ** schreibe jeweils eine Zeile 'Dateiname'. –

Antwort

1

Zuerst Ihre CSV-Datei nur 1 Zeile haben, da Sie die gleiche Datei für das Schreiben sind zu öffnen (gestutzt, nicht anhängen).

Sie müssen einen with Block am Anfang erstellen, öffnen Sie die Datei und erstellen Sie das CSV-Objekt ein für alle Mal, und alle anderen Anweisungen gehen in den with Block.

Die Datei csv muss durch Leerzeichen getrennt sein. Zitiert wird geschehen, wenn Leerzeichen in Dateinamen gefunden werden, keine Notwendigkeit, etwas anderes zu tun

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) 

Dann schreiben 1 Zeile pro Dateiname + Index Paar, als eine Liste. csv Modul behandelt die Trennung/Zitat für Sie, keine Notwendigkeit, eine Zeichenfolge zu formatieren.

die innere Schleife sieht wie folgt aus:

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 

Sie müssen nur die Inkrementierung von label einzustellen, da Sie scheinen 0 überall zu erwarten (so was nützt), während hier finden Sie eine bekommen absolute Anzahl, die für alle Dateien aller Verzeichnisse erhöht wird.

Verwandte Themen