Bilddaten in Liste Speichern

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.
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

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?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

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
BlackJack

Oder `os.path.getsize()`.
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

Genau das hatte ich im Sinn ... aber scheinbar gerade nicht im Kopf :lol:
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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 :)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

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!
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich verwende Sternchenimporte nur bei exceptions... Also from exceptions import *

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Das Modul wird doch komplett in `__builtins__` importiert!? Die Namen stehen alle ohne Import zur Verfügung.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hm, neee... Ich meinte meine eigene exceptions.py... Der richtige import bei PyLucid lautet auch from PyLucid.system.exceptions import * :lol:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten