Seite 1 von 1
Cookies und anderen Müll löschen
Verfasst: Mittwoch 31. Januar 2007, 10:21
von snakeseven
Hi,
Der lästige Windowsmüll mit einem Schlag wech.
Gruss, Seven
Code: Alles auswählen
# -*- coding: iso-8859-1 -*-
'''
Befreit Windows-XP von temporärem Datenmüll
'''
import win32con, win32api,os
tempinternetpath = 'C:/Dokumente und Einstellungen/xx/Lokale Einstellungen/Temporary Internet Files'
temppath = 'C:/Dokumente und Einstellungen/xx/Lokale Einstellungen/Temp/'
cookiespath = 'C:/Dokumente und Einstellungen/xx/Cookies/'
zuletztverwendet = 'C:/Dokumente und Einstellungen/xx/Recent'
#--------------------------------------- Temporary Internet Files -----------------------------------------
win32api.SetFileAttributes(tempinternetpath, win32con.FILE_ATTRIBUTE_NORMAL) # Dateiattribut auf 'normal' setzen
allefiles = os.listdir(tempinternetpath + '/')
for af in allefiles:
if os.path.isfile(tempinternetpath + '/' + af): # Check ob File
try:
os.remove(tempinternetpath + '/' + af) # Temporary Internet Files löschen
except:
pass
win32api.SetFileAttributes(tempinternetpath,win32con.FILE_ATTRIBUTE_HIDDEN) # Dateiattribut auf 'versteckt' setzen
#------------------------------------------------- Temp -----------------------------------------------------
allefiles = os.listdir(temppath)
for af in allefiles:
if os.path.isfile(temppath + af):
try:
os.remove(temppath + af) # Temp-Files löschen
except:
pass
#------------------------------------------------ Cookies ---------------------------------------------------
allefiles = os.listdir(cookiespath)
for af in allefiles:
if af <> 'index.dat':
if os.path.isfile(cookiespath + af):
try:
os.remove(cookiespath + af) # Cookies löschen
except:
pass
#----------------------------------- zuletzt verwendete Dokumente ---------------------------------------
win32api.SetFileAttributes(zuletztverwendet, win32con.FILE_ATTRIBUTE_NORMAL)
allefiles = os.listdir(zuletztverwendet + '/')
for af in allefiles:
if os.path.isfile(zuletztverwendet + '/' + af):
try:
os.remove(zuletztverwendet + '/' + af) # 'Zuletzt verwendete Dokumente' - Ordner leeren
except:
pass
win32api.SetFileAttributes(zuletztverwendet,win32con.FILE_ATTRIBUTE_HIDDEN)
Verfasst: Mittwoch 31. Januar 2007, 10:57
von jens
Nett, aber warum nutzt du nicht die Umgebnungsvariablen, um die Pfade festzustellen?
IMHO ist ein Vergleich mit "<>" unschön, besser: "!=" verwenden.
Außerdem würde ich os.path.join() nutzten.
Im temp-Verz. können auch Unterverzeichnisse vorkommen, du löscht aber nur Dateien.
Verfasst: Mittwoch 31. Januar 2007, 11:36
von Leonidas
Und warum so komische Kommentare mit vielen Bindestrichen? Die Inline-Kommentare sind auch hässlich und stören.
Verfasst: Mittwoch 31. Januar 2007, 11:56
von BlackJack
In dem Quelltext kommen auch sehr viele Wiederholungen vor, die man in eine oder mehrere Funktionen verlagern könnte. Ungetestet:
Code: Alles auswählen
import win32con, win32api, os
def delete(path, hidden=False, exclude=frozenset()):
exclude = set(exclude)
if hidden:
win32api.SetFileAttributes(path, win32con.FILE_ATTRIBUTE_NORMAL)
for filename in os.listdir(path):
if filename not in exclude:
full_path = os.path.join(path, filename)
if os.path.isfile(full_path):
try:
os.remove(full_path)
except IOError:
pass
if hidden:
win32api.SetFileAttributes(path, win32con.FILE_ATTRIBUTE_HIDDEN)
def main():
home = 'C:/Dokumente und Einstellungen/xx'
tempinternetpath = os.path.join(home,
'Lokale Einstellungen',
'Temporary Internet Files')
temppath = os.path.join(home, 'Lokale Einstellungen', 'Temp')
cookiespath = os.path.join(home, 'Cookies')
zuletztverwendet = os.path.join(home, 'Recent')
for args in ((tempinternetpath, True),
(temppath,),
(cookiespath, False, ['index.dat']),
(zuletztverwendet, True)):
delete(*args)
if __name__ == '__main__':
main()
Das `hidden`-Argument kann man evt. loswerden, wenn man überprüft, ob das Verzeichnis versteckt ist und darauf entsprechend reagiert.
Verfasst: Mittwoch 31. Januar 2007, 13:21
von snakeseven
Hi zusammen,
Ich habs auf die Schnelle gebastelt, weil die Kiste mal wieder zugemüllt war und XP die Cookies nicht gelöscht hat. Auf Schönheit habe ich dabei nicht geachtet
. Danke aber für die Verbesserungsvorschläge !
Gruss, Seven
Und dann doch eine Frage:
Außer, daß es eleganter aussieht, hat os.path.join() noch andere Vorteile gegenüber der '+' Verknüpfung ?
Verfasst: Mittwoch 31. Januar 2007, 13:54
von BlackJack
snakeseven hat geschrieben:Außer, daß es eleganter aussieht, hat os.path.join() noch andere Vorteile gegenüber der '+' Verknüpfung ?
Es funktioniert plattformübergreifend und es fügt, wenn nötig, einen Pfadtrenner ein.
Code: Alles auswählen
In [49]: 'a' + 'b'
Out[49]: 'ab'
In [50]: os.path.join('a', 'b')
Out[50]: 'a/b'
In [51]: os.path.join('a/', 'b')
Out[51]: 'a/b'
Verfasst: Mittwoch 31. Januar 2007, 15:10
von jens
Und eine Version von mir:
Code: Alles auswählen
import sys, os, stat
try:
import win32con, win32api
except ImportError, e:
print "Import Error:", e
print "You need win32 from:"
print "http://sourceforge.net/projects/pywin32/"
sys.exit()
def delete(path, hidden=False, exclude=frozenset()):
print "Cleaning:", path
exclude = set(exclude)
#~ if hidden:
#~ win32api.SetFileAttributes(path, win32con.FILE_ATTRIBUTE_NORMAL)
saved = 0
count = 0
for filename in os.listdir(path):
if filename not in exclude:
full_path = os.path.join(path, filename)
if os.path.isfile(full_path):
try:
size = os.stat(full_path)[stat.ST_SIZE]
os.remove(full_path)
except (OSError, IOError), e:
print "Error:", e
else:
saved += size
count += 1
print "deleted %s file(s) - %s Bytes" % (count, saved)
print
return count, saved
#~ if hidden:
#~ win32api.SetFileAttributes(path, win32con.FILE_ATTRIBUTE_HIDDEN)
def main():
userprofile = os.environ["USERPROFILE"]
windir = os.environ["WINDIR"]
paths = (
{
"path": os.path.join(
userprofile, 'Lokale Einstellungen', 'Temporary Internet Files'
),
#~ "hidden": True,
},
{
"path": os.path.join(userprofile, 'Lokale Einstellungen', 'Temp'),
#~ "hidden": True,
},
{
"path": os.path.join(userprofile, 'Cookies'),
#~ "hidden": True,
"exclude": ['index.dat'],
},
{
"path": os.path.join(userprofile, 'Recent'),
#~ "hidden": True,
},
{
"path": os.path.join(windir, 'Temp'),
#~ "hidden": True,
},
{
"path": os.environ["temp"],
#~ "hidden": True,
},
)
total_saved = 0
total_count = 0
for kwargs in paths:
count, saved = delete(**kwargs)
total_saved += saved
total_count += count
print "%s total deleted files - %s Bytes saved" % (total_count, total_saved)
if __name__ == '__main__':
main()
Wozu eigentlich der hidden Kram??? Der kann doch weg, oder nicht?
Wichtig ist, es gibt noch das temp unter c:\windows und das offizielle temp Verzeichnis
Verfasst: Mittwoch 31. Januar 2007, 18:15
von jens
Neue Version, die auch Verzeichnisse samt Inhalt löscht:
Code: Alles auswählen
import sys, os, stat
try:
import win32con, win32api
except ImportError, e:
print "Import Error:", e
print "You need win32 from:"
print "http://sourceforge.net/projects/pywin32/"
sys.exit()
cleand_path = []
def delete_dirs(full_path):
"""
Verzeuchnis mit allen Unterverzeichnis und Dateien löschen.
"""
print "> delete dir:", full_path
dirs = [dir for dir,_,_ in os.walk(full_path)]
dirs.reverse()
size = 0
count = 0
for dir in dirs:
print dir
current_count, current_size = delete(dir)
size += current_size
count += current_count
try:
os.rmdir(dir)
except OSError, e:
print "Error:", e
return count, size
def delete(path, hidden=False, exclude=frozenset()):
if path in cleand_path:
# Das Verzeichniss wurde schon einmal gelöscht.
return (0,0)
cleand_path.append(path)
print "Cleaning:", path
exclude = set(exclude)
try:
file_list = os.listdir(path)
except WindowsError, e:
print "Error:", e
print
return (0,0)
size = 0
count = 0
for filename in file_list:
if filename in exclude:
continue
full_path = os.path.join(path, filename)
if os.path.isfile(full_path):
try:
current_size = os.stat(full_path)[stat.ST_SIZE]
win32api.SetFileAttributes(
full_path, win32con.FILE_ATTRIBUTE_NORMAL
)
os.remove(full_path)
except (OSError, IOError), e:
print "Error:", e
current_size = 0
current_count = 0
else:
current_count = 1
elif os.path.isdir(full_path):
current_count, current_size = delete_dirs(full_path)
size += current_size
count += current_count
print "deleted %s file(s) - %s Bytes" % (count, size)
print
return count, size
def main():
userprofile = os.environ["USERPROFILE"]
windir = os.environ["WINDIR"]
paths = (
{
"path": os.path.join(
userprofile, 'Lokale Einstellungen', 'Temporary Internet Files'
),
},
{
"path": os.path.join(userprofile, 'Lokale Einstellungen', 'Temp'),
},
{
"path": os.path.join(userprofile, 'Cookies'),
"exclude": ['index.dat'],
},
{"path": os.path.join(userprofile, 'Recent')},
{"path": os.path.join(windir, 'Temp')},
{"path": os.environ["temp"]},
)
total_size = 0
total_count = 0
for kwargs in paths:
count, size = delete(**kwargs)
total_size += size
total_count += count
print "%s total deleted files - %s Bytes size" % (total_count, total_size)
if __name__ == '__main__':
main()
Verfasst: Mittwoch 31. Januar 2007, 18:34
von snakeseven
Hi Jens,
da hast du dich ja richtig reingekniet
Der Hiddenkram kam dadurch, daß die Dateien in den versteckten Ordnern nicht gelöscht wurden. Werde deine Version mal ausprobieren.
Gruss, Seven
Verfasst: Mittwoch 31. Januar 2007, 18:37
von sape
Jens, bitte keine Builtins und Keywords überschreiben.
Zeile 23:
lg
Verfasst: Mittwoch 31. Januar 2007, 18:45
von pyStyler
sape hat geschrieben:Jens, bitte keine Builtins und Keywords überschreiben.
Zeile 23:
lg
warum nicht?
Verfasst: Mittwoch 31. Januar 2007, 18:56
von sape
pyStyler hat geschrieben:sape hat geschrieben:Jens, bitte keine Builtins und Keywords überschreiben.
Zeile 23:
lg
warum nicht?
Weil es sehr schlechter Stil ist das zu machen...
Verfasst: Mittwoch 31. Januar 2007, 19:21
von pyStyler
das ist ja toll aber du hast mich nicht ganz verstanden! Ich denke der Jens weiss das. Dein Kommentar dazu ist also total überflüssi
g.
Verfasst: Mittwoch 31. Januar 2007, 19:33
von sape
pyStyler hat geschrieben:das ist ja toll aber du hast mich nicht ganz verstanden! Ich denke der Jens weiss das. Dein Kommentar dazu ist also total überflüsis
g.
Sicherlich weiß das Jens. Hab ja auch nichts gengeteiliges behauptet
BTW: Deshalb sollte man keine builtins überschrieben:
Das er das nur im Namenspace einer Funktion überschreibt und es nur dort gültig ist, ändert nichts an der Tatsache das es schlechter Stil ist und bleibt.
Und nein, der Kommentar ist nicht überflüssig und auch nicht falsch. Gerade für die Anfänger ist es wichtig das klar zu stellen, sonst kommen die noch auf dumme Gedanken wenn sie sein Code Lesen um daraus zu lernen. -> Siehe nur die ganzen Tutorials zu TKinter wo Stern importe genutzt werden.
BTW: Ich denke Jens versteht das und nimmt es mir nicht übel das ich dass erwähnt habe, da es sicherlich nur ein Schreibfehler von ihm war und er bestimmt nicht möchte das solche Fehler in seinem Code sind die dann als Beispiel dienen.
lg
Verfasst: Mittwoch 31. Januar 2007, 19:49
von jens
sape hat geschrieben:Jens, bitte keine Builtins und Keywords überschreiben.
Zeile 23:
Ups, ganz übersehen
Versuche ich eigentlich immer zu vermeiden...
Naja, der code ist eh nicht mehr so super toll...
Verfasst: Mittwoch 31. Januar 2007, 19:53
von birkenfeld
BlackJack hat geschrieben:snakeseven hat geschrieben:Außer, daß es eleganter aussieht, hat os.path.join() noch andere Vorteile gegenüber der '+' Verknüpfung ?
Es funktioniert plattformübergreifend und es fügt, wenn nötig, einen Pfadtrenner ein.
Code: Alles auswählen
In [49]: 'a' + 'b'
Out[49]: 'ab'
In [50]: os.path.join('a', 'b')
Out[50]: 'a/b'
In [51]: os.path.join('a/', 'b')
Out[51]: 'a/b'
Aber Vorsicht:
(Ja, das ist korrekt, aber verwirrend.)