Seite 1 von 2

Verfasst: Montag 21. August 2006, 13:33
von gorba
jop, habs nun auch mit dem wb Mode gemacht.
Gibt es was in python wie sizeof() in c, dass einem die grösse eines Objektes anzeigt?

Verfasst: Montag 21. August 2006, 13:40
von jens
len() ?

In einem Dateiobjekt geht das auch mit:

Code: Alles auswählen

f = file(...) # FileObjekt erzeugen

f.seek(0,2) # Am Ende der Daten springen
f_len = f.tell() # Aktuelle Position
f.seek(0) # Zurück zum Anfang springen

print "Datei größe in Bytes:", f_len

Verfasst: Montag 21. August 2006, 14:57
von midan23
jens hat geschrieben:

Code: Alles auswählen

f = file(...) # FileObjekt erzeugen

f.seek(0,2) # Am Ende der Daten springen
f_len = f.tell() # Aktuelle Position
f.seek(0) # Zurück zum Anfang springen

print "Datei größe in Bytes:", f_len
Es geht auch etwas einfacher:

Code: Alles auswählen

import os
f_len = os.stat(...).st_size

print "Dateigrösse : %s Bytes" % f_len

Verfasst: Montag 21. August 2006, 16:53
von BlackJack
Oder `os.path.getsize()`.

Verfasst: Montag 21. August 2006, 20:14
von midan23
Genau das hatte ich im Sinn ... aber scheinbar gerade nicht im Kopf :lol:

Verfasst: Montag 21. August 2006, 21:24
von Michael Schneider
Hi,
pyStyler hat geschrieben:das tool was du sucht heisst HJ-SPLIT für WIN un LINUX. Damit kannst du alles teilen und wieder zusammen setzen.
hjSplit macht in etwa das:

Code: Alles auswählen

from os.path import *
from tkFileDialog import askopenfilename
from Tkinter import *

def erfrage_DateiName():
    tk = Tk()
    sDateiName = askopenfilename()
    tk.destroy()
    return sDateiName

sDateiName = erfrage_DateiName()

if sDateiName:
    fileEingabe = open(sDateiName, "rb")
    lChunks = [fileEingabe.read(700) for i in range(1+getsize(sDateiName)/700)]
    fileEingabe.close()
    sPfad, sDatei = split(sDateiName)
    sDateiBasis, sExtension = splitext(sDatei)

    for iChunk in range(len(lChunks)):
        sAusgabeName = "%s_%03i%s" % (sDateiBasis, iChunk, sExtension)
        fileAusgabe = open(sAusgabeName, "wb")
        fileAusgabe.write(lChunks[iChunk])
        fileAusgabe.close()
        print "Datei", sAusgabeName,"geschrieben. Check Dateigroesse:", getsize(sAusgabeName)
"wb" und "rb" ist natürlich wichtig, weil Python sonst gefluchtete Sonderzeichen konvertiert. Vor dem Problem steht man auch, wenn man beispielsweise Bilder von einer Webseite laden möchte. Vergisst man da das "wb", wird die Datei etwas größer und das Bild geht den Bach runter.

Grüße,
der Michel

Verfasst: Dienstag 22. August 2006, 07:26
von jens
Ihh, Sternchenimport (from os.path import *) Ich hatte mich nämlich die ganze Zeit gefragt, woher/was getsize() kommt/ist...

Mit os.stat(...).st_size und os.path.getsize() geht es natürlich viel einfacher, als mit meiner Variante... Aber ich dachte irgendwie das ein FileObjekt vorliegt und nicht das man eine echte Datei hat :)

Verfasst: Dienstag 22. August 2006, 07:48
von gorba
Danke für die super Hilfen, auch an Michael Schnider, da konnte ich mir ein paar ideen klauen.
Jens, du hast richtig gedacht, ich hatte tatsächlich ein file objekt... =)

THX!

EDIT (jens): Full-Quote gelöscht!

Verfasst: Dienstag 22. August 2006, 10:56
von Michael Schneider
Hi Jens!
jens hat geschrieben:Ihh, Sternchenimport (from os.path import *) Ich hatte mich nämlich die ganze Zeit gefragt, woher/was getsize() kommt/ist...
Ist doch nur für die Demo. :-)
jens hat geschrieben: Mit os.stat(...).st_size und os.path.getsize() geht es natürlich viel einfacher, als mit meiner Variante... Aber ich dachte irgendwie das ein FileObjekt vorliegt und nicht das man eine echte Datei hat :)
Das war auch mein erster Gedanke. Nachdem aber alle auf Dateien umgeschwenkt sind und sich keiner beschwerte, habe ich das auch gemacht. :D
Hatte ja nicht geahnt, dass wirklich jemand ein Bild in ein FileObjekt einliest, nur um es dann in 700-Byte Häppchen wieder zu speichern (entsprechend Beschreibung). :-)

Grüße,
der Michel

Verfasst: Dienstag 22. August 2006, 11:01
von gerold
Michael Schneider hat geschrieben:

Code: Alles auswählen

from os.path import *
from tkFileDialog import askopenfilename
from Tkinter import *
...sagt NEIN zu Sternchenimport! So bequem darf man nicht einmal bei einem Beispiel sein. Anfänger sehen das Beispiel, denken sich nichts dabei und verwenden auch Sternchen beim Importieren.

Und wir müssen das wieder ausbaden und ständig neu erklären, warum man das nicht tun soll...

lg
Gerold
:-)

Verfasst: Dienstag 22. August 2006, 11:05
von gorba
wer die namespace probleme in c kennt, denkt nich mal über die *sternchen* lösung nach... Finde das ein wenig fahrlässig von Python, sowas zu unterstüzen. Allerdings kann man auch sagen der Programmierer muss wissen was er tut.

Verfasst: Dienstag 22. August 2006, 11:07
von jens
Ich verwende Sternchenimporte nur bei exceptions... Also from exceptions import *

Verfasst: Dienstag 22. August 2006, 22:57
von BlackJack
Das Modul wird doch komplett in `__builtins__` importiert!? Die Namen stehen alle ohne Import zur Verfügung.

Verfasst: Mittwoch 23. August 2006, 07:11
von jens
Hm, neee... Ich meinte meine eigene exceptions.py... Der richtige import bei PyLucid lautet auch from PyLucid.system.exceptions import * :lol: