TypeError: coercing to Unicode: need string or buffer. ???

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.
BlackJack

Samstag 26. Januar 2008, 16:38

Man kann einfach ein Tupel aus Dateigrösse und Prüfsumme als Schlüssel nehmen. Also an der entsprechenden Stelle:

Code: Alles auswählen

        addentry(mydict, (fsize, fdigest), fname)
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Samstag 26. Januar 2008, 17:23

Ja, und genau deswegen wollte ich auch keine Pickle Antwort.

Weil ich plattformunabhängig bleiben will und man sich ja auch mal vornehmen könnte, dasselbe in C zu portieren.
Spätestens dann ist es schon viel einfacher, wenn man ein klar definiertes Byteformat hat.

Schneller und einfacher (zum Coden) ist dein Vorschlag aber natürlich alle mal.
Vielleicht führe ich es als python-only Version weiter in 2 Branches.

EDIT:
python is ja auch plattformunabhängig. :)
Aber der Key muss auch hashable sein. Weiss nicht ob das mit dem tupel funktioniert.
BlackJack

Samstag 26. Januar 2008, 18:52

Solange alle Elemente im `tuple` "hashable" sind, ist es auch das Tupel selbst.

Code: Alles auswählen

In [317]: hash((42L, 'spam'))
Out[317]: -300945752
Wenn Du das irgendwann mal in C umsetzen willst reicht ein `unsigned long` oder `unsigned long long`. Grössere Zahlen wird auch die C-Bibliothek für die Dateigrösse nicht liefern.

Und letztendlich dürfte ein Textformat für beliebig grosse Zahlen am portabelsten sein, weil über dem was der Prozessor in einem Register halten kann bzw. was C mit einem `unsigned long long` aufnehmen kann, jede Sprache/Implementierung ein eigenes Süppchen für solche grossen Zahlen als Binärformat kocht.
Antworten