was zählt os.path.getsize [gelöst]

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Oscar
User
Beiträge: 22
Registriert: Dienstag 25. September 2007, 17:57

Mittwoch 5. Dezember 2007, 23:46

Hi,
bei meiner Annäherung an Python beschäftige ich mich gerade mit dem os modul.
Ich lasse mir z.B. die Größe einer Datei anzeigen:

Code: Alles auswählen

oscar@debbi:~$ ls -l text |awk '{ print $5 }'
81756

Code: Alles auswählen

>>> os.path.getsize('/home/oscar/text')
81756L
Wie ich das L loswerde habe ich schon herausgeknobelt aber interessanter
ist die Frage, warum es dort steht und was es bedeutet.
Hier steht die Antwort leider nicht: http://www.python.org/doc/current/lib/m ... .path.html
Gruß Oscar
Zuletzt geändert von Oscar am Donnerstag 6. Dezember 2007, 18:34, insgesamt 1-mal geändert.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Mittwoch 5. Dezember 2007, 23:49

Das L steht für Long (Integer). Also ein grosser / langer Integer ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Mittwoch 5. Dezember 2007, 23:50

Hmpf, probieren wir mal was aus:

Code: Alles auswählen

In [1]: 372477894372
Out[1]: 372477894372L

In [2]: 4323
Out[2]: 4323
L steht für Long. Wenn eine Zahl größer ist als

Code: Alles auswählen

In [6]: import sys

In [7]: sys.maxint
Out[7]: 2147483647
wirds'n Long.

Code: Alles auswählen

In [8]: sys.maxint + 1
Out[8]: 2147483648L

Jedoch stören diese nicht bei der Ausgabe (und allgemein auch nicht):

Code: Alles auswählen

In [9]: print sys.maxint + 1
2147483648
Ich hoffe, dass war verständlich.
Oscar
User
Beiträge: 22
Registriert: Dienstag 25. September 2007, 17:57

Donnerstag 6. Dezember 2007, 00:05

Hi,
okay, Danke an Euch. Ich interpretiere das so: die Funktion gibt mir
die Dateigröße + Datentyp zurück. Blöderweise steht das in der o.g.
Doku nicht! Die verkürzte Ausgabe mit print ist da schon hilfreich.
Gruß Oscar
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Donnerstag 6. Dezember 2007, 00:09

Ich befürchte du verstehst das Falsch. Ein Wert ist in Python immer an einen Datentypen gebunden. Das L wird einfach vom interaktiven Interpreter angezeigt damit du einen long von einem int unterscheiden kannst ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Oscar
User
Beiträge: 22
Registriert: Dienstag 25. September 2007, 17:57

Donnerstag 6. Dezember 2007, 00:18

Hi,
@veers: Nee, ich glaube, das ich das schon richtig verstehe. Es gibt, wie
in anderen Programmiersprachen auch, unterschiedliche Datentypen mit
unterschiedlichen Wertebereichen - das ist schon klar. Mir ging es ja auch
nur um die Ausgabe der Funktion (wobei ich - wie ich jetzt sehe - auch selber
auf die Bedeutung von L hätte kommen können). :(
BlackJack

Donnerstag 6. Dezember 2007, 09:06

Du hast geschrieben, dass Dir die Funktion die Dateigröße + Datentyp zurück gibt, und das stimmt so nicht. Die Funktion gibt nur die Dateigrösse zurück. Die Information über den Typ ist in *jedem* Objekt enthalten, die braucht man nicht extra zurück geben.

Für das 'L' ist das Zahlobjekt selbst verantwortlich, nämlich dann, wenn man es nach seiner `repr()`-Form befragt, was die Python-Shell tut wenn sie Ergebnisse darstellt. ``print`` dagegen bittet Objekte ihre `str()`-Form zu liefern und da Antworten `long`-Instanzen ohne das 'L'.
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Donnerstag 6. Dezember 2007, 09:43

und warum gibt cursor.exeute() (von der DB API 2.0) ein Long zurueck, auch wenn der rueckgabewert deutlich unter sys.maxint liegt?
cp != mv
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Donnerstag 6. Dezember 2007, 09:49

Costi hat geschrieben:und warum gibt cursor.exeute() (von der DB API 2.0) ein Long zurueck, auch wenn der rueckgabewert deutlich unter sys.maxint liegt?
Vielleicht wird beim return explizit auf ein Long verwiesen? 'return long(number)' oder so. 'getsize' macht das imho auch.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 6. Dezember 2007, 11:45

Costi hat geschrieben:und warum gibt cursor.exeute() (von der DB API 2.0) ein Long zurueck, auch wenn der rueckgabewert deutlich unter sys.maxint liegt?
Vielleicht um konsistent zu sein für den Fall, dass `execute()` eben mehr als `sys.maxint` ausgibt. Auf 32-Bit Systemen kann sowas möglicherweise mal vorkommen, auf 64-Bit Systemen eher unwarscheinlich.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Donnerstag 6. Dezember 2007, 13:12

Freut euch auf Py3k :)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Oscar
User
Beiträge: 22
Registriert: Dienstag 25. September 2007, 17:57

Donnerstag 6. Dezember 2007, 18:37

Hi,
noch mal kurz zum Thema.
@ veers und BlackJack: ich glaube, jetzt geht mir die Lampe auf, von der ich vorher
schon glaubte, das sie aufgegangen ist. :idea: Danke
Gruß Oscar
Antworten