Seite 1 von 1

List: Suche mit mehreren Kriterien

Verfasst: Montag 16. Juli 2012, 12:51
von OttoPython
Hi Leute,

ich brauch mal n bisschen Hilfe für einen Grundansatz.

1) Ich habe möchte eine Filelist über den Inhalt eines bestimmten Verzeichnisses erstellen.
- erledigt und läuft ohne probleme
2) in der erstellten Liste, sind nun die Files. Diese Files sind mit dem erstellungsdatum beschriftet und chronologisch fortlaufend. Ich würde nun gern jedes Jahres die erste Datei und die Letzte Datei mir ausgeben lassen. Wie geh ich da ran?
Ich weiß nicht wie ich, wenn ich nach einer bestimmte Sache suche, mir exakt diese Stelle ausgeben lasse. Und wie ich dann das ganze Weg schreibe. Zum wegschreiben n dict() vllt?

Beispiel:

Code: Alles auswählen

20080112
20080125
20080126
20090601
20090805
20090909
dann würde ich gern eine ausgabe von

Code: Alles auswählen

20080112 20080126
20090601 20090909
erhalten.

beste grüße

Re: List: Suche mit mehreren Kriterien

Verfasst: Montag 16. Juli 2012, 13:06
von BlackJack
@OttoPython: 1) Sicherstellen dass die Daten wirklich sortiert sind — `os.listdir()` garantiert das *nicht*, auch wenn es oft so aussieht als wenn die Namen immer sortiert sind!

2) `itertools.groupby()` zum Gruppieren der Jahre verwenden.

3) Erstes und letztes Element aus den Iteratoren nehmen.

4) Randfälle beachten. Was passiert zum Beispiel wenn es nur einen Namen für ein Jahr gibt, und was soll(te) in dem Fall passieren.

Edit:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from itertools import groupby


def main():
    filenames = [
        '20080112',
        '20080125',
        '20080126',
        '20090601',
        '20090805',
        '20090909',
    ]
    
    filenames.sort()
    for key, group in groupby(filenames, lambda fn: fn[:4]):
        group = list(group)
        print key, '->', group[0], group[-1]


if __name__ == '__main__':
    main()