Hallo Jeder, den ich auf meinem letzten Projekt arbeite, und ich bin ein Verzeichnis SchnüfflerPython Directory-Reader Tkinter GUI funktioniert nicht richtig
So, hier ist die Grundlinie dieses Skript erstellen:
- GUI mit Tkinter, dass fragt den Benutzer nach dem Verzeichnis und fordert den Benutzer dazu auf, eine cvs-Datei in dem Bereich ihrer Wahl zu speichern. CSV enthält Dateiname, Dateierweiterung und Dateigröße aus dem Verzeichnis der Benutzer eingegeben.
- Meine GUI hat ein Textbildlauffeld, das den Prozess des Skript und Drucks gedruckt werden soll, wenn es fertig ist,
Meine Probleme:
Als CSV speichern. Es produziert nicht eine CSV und ich bekomme diesen Fehler
„Valueerror: I/O-Operation auf geschlossene Datei“ .asksaveasfilename() ist funktioniert nichtGUI Text Bildlauffeld nicht funktioniert und die Informationen auszudrucken ich brauche
- Wie kann ich Header meine CSV hinzufügen, so dass mein CSV
Dateinamen hat, Erweiterung, Größe und Kommentar
- Wie kann ich Header meine CSV hinzufügen, so dass mein CSV
Anbei unten ist mein Skript. Kann mir jemand dabei helfen?
from Tkinter import Tk
from tkFileDialog import askdirectory
from array import *
import os
version = '1.0'
import os
import csv
from Tkinter import BOTH, LEFT, TOP, END, StringVar
from ttk import Frame, Entry, Button, Label
from ScrolledText import ScrolledText
from tkFileDialog import askdirectory
from tkFileDialog import asksaveasfilename
class FileWalkerWindow(Frame):
def __init__(self):
Frame.__init__(self)
self.pack(expand=True, fill=BOTH)
self.master.title("Directory Snooper v" + version)
self.master.iconname("Directory Snooper")
self.dir = StringVar() # tkinter does not work with standard python variables
self.dir.set(os.getcwd()) # set to current working directory
description = "This program walks through a directories " \
+ "print out name of directory file path. " \
+ "prints out mumber of files in your in your directory. " \
+ "It list files and tests for corrupted zipfiles and " \
+ "creates a CSV file of the findings"
row1 = Frame(self)
Label(row1, text="Choose Directory:").pack(side=LEFT, pady=10)
self.dir_ent = Entry(row1, width=80, textvariable=self.dir)
self.dir_ent.pack(side=LEFT)
Button(row1, text="Browse", width=10, command=self.browse).pack(side=LEFT, padx=5)
row1.pack(side=TOP, ipadx=15)
row2 = Frame(self)
btn = Button(row2, text="Snoop", command=self.savefile, width=15)
btn.pack(side=LEFT, padx=5, pady=10)
row2.pack(side=TOP)
self.output = ScrolledText(self, height=15, state="normal",
padx=10, pady=10,
wrap='word')
self.output.insert(END, description)
self.output.pack(side=LEFT, fill=BOTH, expand=True, padx=5, pady=5)
self.bind('<Key-Return>', self.savefile) # bind enter press to walk
def browse(self):
dirpath = askdirectory(parent=self, title="Select Directory")
self.dir.set(dirpath)
def savefile (self):
self.output.delete(1.0, END)
name=asksaveasfilename()
with open(name,'w') as csvfile:
dirList = os.listdir(self.dir.get())
data = ((fname, str(os.path.getsize(self.dir.get() + "/" + fname)), str(os.path.splitext(fname)[1]),) for
fname in
dirList)
for entry in data:
create=csv.writer(csvfile)
create.writerow(','.join(entry) + '\n')
csvfile.close()
if __name__ == '__main__':
FileWalkerWindow().mainloop()
ist dieser Vorschlag über 'close' korrekt? Bei jeder Iteration wird ein neuer 'csv.writer' erstellt. Es scheint so, als müsste das auch außerhalb der Schleife verschoben werden. dh: entweder öffnen und schließen Sie es jedes Mal, oder öffnen Sie es vor der Schleife und schließen Sie es danach. –
Sie haben Recht, die Erstellung von 'cvs.writer()' bei jeder Iteration ist eine schlechte Sache, ich werde meine Antwort aktualisieren, um das auch zu lösen. Allerdings adressierte ich nur das ursprüngliche Problem, das von 'csvfile.close() 'kam, das innerhalb der Schleife ist :) – filaton