Seite 1 von 1

Mein erstes Programm

Verfasst: Dienstag 26. September 2006, 15:02
von web
Hallo,
ich habe mit meinem Kollegen ein Programm geschrieben, dass alle Dateien eines Ordners auflistet die in den letzten x Tagen geändert wurden
Es stimmen noch nicht alles Eventualitäten da wir das prog erst auf 7 Tage ausgelegt hatten aber für den Anfang bin ich doch zufrieden ^^.

Code: Alles auswählen

import os.path
import time
import os

i = 0
input = raw_input ('Verzeichnispfad: ')
input1 = raw_input ('Alle Dateien anzeigen die in den letzten x Tagen geändert wurden:')

print "Verzeichnispfad: "+input
print "Folgende Dateien wurden in den letzten " +input1 + " Tagen geändert:"
print " "

num = int(input1)

filelist = os.listdir(input)                                                                # die liste auslesen

helpvar         = time.mktime(time.localtime())
localdate       = time.localtime(helpvar)                                                   # Aktuelle Zeit

a = 31 - num                                                                                # Variable für alle Monate mit 31 Tagen
b = 30 - num                                                                                # Variable für alle Monate mit 30 Tagen
c = 28 - num                                                                                # Variable für alle Monate mit 28 Tagen

while (i < len(filelist)):                                                                  # len(z) ist die Anzahl strings in der Liste
    
    filename        = filelist[i]    
    changingdate    = time.localtime(os.path.getmtime(input + filename))                    # Änderungsdatum
    date            = time.ctime(os.path.getmtime(input + filename))



    if (changingdate[0] == localdate[0]):                                                   # Überprüfung des Jahres              
        if (changingdate[1] == localdate[1]):                                               # Überprüfung des Monats
            if (changingdate[2] <= localdate[2] and changingdate[2] >= localdate[2] -num):    # Überprüfung des Tages mit einem Zeitpuffer von 7 Tagen
                print filename + " Änderungsdatum:",                                        # gibt geänderte Datei aus
                print date
        else:
            if (changingdate[1] +1 == localdate[1]):                                        # Überprüfen ob die Monate sich um mehr als einen unterscheiden
                if (changingdate[1] == 1 or changingdate[1] == 3 or changingdate[1] == 5 or changingdate[1] == 7 or changingdate[1] == 8 or changingdate[1] == 10 or changingdate[1] == 12): #Bestimmung des Monats
                    if (changingdate[2] <= localdate[2] +31 and changingdate[2] >= localdate[2] +a):
                        print filename + " Änderungsdatum:",                                # gibt geänderte Datei aus
                        print date
                    
                elif (changingdate[1] == 2):                                                # Bestimmung des Monats
                    if (localdate[0] % 4 == 0 and localdate[0] % 100 != 0 or localdate[0] % 400 == 0):  # Überprüfung auf ein Schaltjahr
                        if (changingdate[2] <= localdate[2] +29 and changingdate[2] >= localdate[2] +b):  
                            print filename + " Änderungsdatum:",                            # gibt geänderte Datei aus
                            print date
                        elif (changingdate[2] <= localdate[2] +28 and changingdate[2] >= localdate[2] +c):
                            print filename + " Änderungsdatum:",                            # gibt geänderte Datei aus
                            print date
                   
                else:                                                                       # Bestimmung des Monats
                    if (changingdate[2] <= localdate[2] +30 and changingdate[2] >= localdate[2] +23):  
                        print filename + " Änderungsdatum:",                                # gibt geänderte Datei aus
                        print date
                   
    
          
    else:
        if (changingdate[0] +1 == localdate[0]):                                            # Überprüfen ob in den letzten 7 Tagen ein Jahreswechsel stattgefunden hat
            if (changingdate[1] == 12 and localdate[1] == 1):
                if (changingdate[2] <= localdate[2] +31 and changingdate[2] >= localdate[2] +24):
                    print filename + " Änderungsdatum:",                                    # gibt geänderte Datei aus
                    print date
           

    i = i + 1                                                                               # erhöht den Zähler

print " "
print " "

[/code]

Verfasst: Dienstag 26. September 2006, 16:05
von Rebecca
Man macht Zeilenlaengen nicht laenger als 80 Zeichen. Die ganzen Kommentare wuerde ich nicht ans Ende der Zeile schreiben, sondern ueber die entsprechende Zeile. Etwa so:

Code: Alles auswählen

#Hallo Welt ausgeben:
print "Hallo Welt"
Ueberhaupt: PEP 8 sollte man sich unters Kopfkissen legen. :wink:

Dann sehe ich da einen Index i. Soweit ich das sehe, ist der ueberfluessig, man kann es naemlich so machen:

Code: Alles auswählen

for filename in filelist:
    changingdate    = time.localtime(os.path.getmtime(input + filename))
    date            = time.ctime(os.path.getmtime(input + filename))
    ....
Immer, wenn man for i in schreiben will, drueber nachdenken, ob man den Index auch wirklich braucht. In Python ist das naemlich eher selten der Fall.

PS: Ich weiss ja nicht, wofuer ihr das Programm geschrieben habt, aber unter Linux gibt's dafuer einen Einzeiler:

Code: Alles auswählen

find ~/bla -mtime -7 -printf "%p   Aenderungsdatum: %t\n"

Verfasst: Dienstag 26. September 2006, 16:51
von mawe
Hi!

Rebecca hat ja schon die wichtigsten Styling-Tipps gegeben :)

Für dein erstes Programm ... ganz schön lang :) Meines war wesentlich kürzer.

Es geht aber auch hier viel kürzer ;)
Das Datum der letzten Änderung kann man so herausfinden:

Code: Alles auswählen

last = os.stat("datei.dat").st_mtime
In ein sinnvolles Format umwandeln mit

Code: Alles auswählen

time.localtime(last)
Das Modul datetime bietet dann noch so Nützlichkeiten wie timedelta, womit Datumsberechnungen ganz einfach werden, ... usw ... :)

Naja, viel Spass noch :)

Gruß, mawe

Verfasst: Dienstag 26. September 2006, 18:07
von SigMA
hehe ich will ja nicht kleinlich sein aber

Code: Alles auswählen

print " "
ist unnütz!

entweder:

Code: Alles auswählen

print
oder wenn davor ne Zeile ist ein \n in den String

SigMA