Seite 1 von 1

Path

Verfasst: Samstag 27. Mai 2006, 07:34
von mitsuhiko
Vor lauter Arbeiten mit dem Filesystem hing mir Python schon fast raus. Ich hab mir aus diesem Grund eine netter Klasse geschrieben, die hoffentlich alle diese Bereiche abdeckt: http://trac.pocoo.org/repos/sandbox/path/path.py

Da es keine wirklich gute Docu atm gibt, hier mal ein Doctest:

Code: Alles auswählen

>>> from path import Path
>>> test = Path('~/testfile.txt')
>> test
Path('/home/blackbird/testfile.txt')
>>> test.exists
True
>>> test.delete()
>>> test.exists
False
>>> f = test.open('w')
>>> f.write(u'Hello Wörld')
>>> f.close()
>>> test.exists
True
>>> f = test.open('rb')
>>> f.read()
'Hello W\xc3\xb6rld'
>>> f.close()
>>> f = test.open('r')
>>> f.read()
u'Hello W\xf6rld'
>>> f.close()
>>> test.mtime
datetime.datetime(2006, 5, 27, 8, 31, 26)
>>> test.delete()
Die wichtigsten Sachen werden hier glaub ich erklärt. Zumindest was Dateien lesen/schreiben angeht. "r", "w", "a" Modi werden mit codecs.open geöffnet, ergo muss man das charset übergeben, wenn man es nicht tut nimmer er 'utf-8' an. genauers gibts help(Path.open) aus.

Alle wichtigen Dateieigenschaften sind properties und geben auch sinnvolle Werte aus. Das heißt zb. datetime Objekte anstatt unix timestamps.

Ich hoffe es kann auch auser mir noch jemand brauchen, bei Fehlern bescheid sagen.

//EDIT: jetzt kann man auch mit path rechnen:

Code: Alles auswählen

>>> from path import Path
>>> fn = Path('myfile.txt')
>>> fn + 5
Path('/home/blackbird/Developement/sandbox/path/myfile5.txt')
>>> fn + 5 - 9
Path('/home/blackbird/Developement/sandbox/path/myfile0.txt')
>>> fn + 5 - 2
Path('/home/blackbird/Developement/sandbox/path/myfile3.txt')
:-)

Re: Path

Verfasst: Samstag 27. Mai 2006, 22:46
von Leonidas
blackbird hat geschrieben:

Code: Alles auswählen

Path('/home/blackbird/Developement/sandbox/path/myfile5.txt')
>>> fn + 5 - 9
Path('/home/blackbird/Developement/sandbox/path/myfile0.txt')
Es ist schon etwas spät aber gäbe 5 - 9 nicht -4 und nicht 0? Oder hast du entschieden dass nur N0+ sinnvoll ist?

Re: Path

Verfasst: Sonntag 28. Mai 2006, 11:31
von mitsuhiko
Leonidas hat geschrieben:
blackbird hat geschrieben:

Code: Alles auswählen

Path('/home/blackbird/Developement/sandbox/path/myfile5.txt')
>>> fn + 5 - 9
Path('/home/blackbird/Developement/sandbox/path/myfile0.txt')
Es ist schon etwas spät aber gäbe 5 - 9 nicht -4 und nicht 0? Oder hast du entschieden dass nur N0+ sinnvoll ist?
Letzteres. Weil ein "-" in einem Dateinamen kann ein Trenner sein und muss kein vorzeichen für die Zahl sein. DSC-4234 + 1 soll ja nicht DSC-4233 sondern DSC-4335 geben.

Verfasst: Sonntag 28. Mai 2006, 11:53
von murph
nett, dass sich mal jemand auf dem bereich die mühe gemacht hat

Verfasst: Sonntag 28. Mai 2006, 23:06
von BlackJack
Das mit dem Rechnen ist originell.

Aber der Name des Moduls ist schon länger "belegt". Jason Orendorff's `path.py` mit einem `Path` Objekt wird schon von vielen Leuten benutzt und wird regelmässig als Modul für die Standardbibliothek vorgeschlagen. Gibt auch ein PEP dazu: PEP 355.

Verfasst: Montag 29. Mai 2006, 08:41
von mitsuhiko
BlackJack hat geschrieben:Das mit dem Rechnen ist originell.

Aber der Name des Moduls ist schon länger "belegt". Jason Orendorff's `path.py` mit einem `Path` Objekt wird schon von vielen Leuten benutzt und wird regelmässig als Modul für die Standardbibliothek vorgeschlagen. Gibt auch ein PEP dazu: PEP 355.
Das ist mir bewusst :-) Aber Orendorffs Path ist noch sehr an os.path gebunden wärend mein Modul erst gar nicht versucht so zu funktionieren ^^
Intern werden immer absolute Pfade gespeichert und auf den Blödsinn mit von str ableiten hab ich verzichtet ;-)