Hallo liebe Python-Gemeinde, ich bin aus unbeeinflussbaren Gründen auf Python 2.4 angewiesen. Und da ist die String-Operation rpartition() noch nich implementiert. Welche Alternativen gibt es für diese ältere Version? Gruß, Johannes
Am 13.08.2010 13:08, schrieb Johannes Markert:
ich bin aus unbeeinflussbaren Gründen auf Python 2.4 angewiesen. Und da ist die String-Operation rpartition() noch nich implementiert. Welche Alternativen gibt es für diese ältere Version?
str.rsplit(sep, 1) sollte in etwa tun, was Du brauchst. -- [x] u1f
Hallo Johannes, On 2010-08-13 13:08, Johannes Markert wrote:
ich bin aus unbeeinflussbaren Gründen auf Python 2.4 angewiesen. Und da ist die String-Operation rpartition() noch nich implementiert. Welche Alternativen gibt es für diese ältere Version?
auf die Schnelle habe ich keinen Ersatz für Python 2.4 gefunden, daher hier eine Implementierung als Funktion, die sich wie `rpartition` verhalten sollte. Das Schwierigste war, die richtigen Rückgabetypen für die Strings sicherzustellen. Ich garantiere nicht für Fehlerfreiheit! :) def rpartition(s, sep): """Implementation of `rpartition` as a function for Python < 2.5. See http://docs.python.org/library/stdtypes.html#str.rpartition . Warning: Not thoroughly tested. """ parts = s.split(sep) # If one of the arguments is a unicode string, returned strings # need to be unicode strings as well. `string_type(...)` may # raise a `UnicodeDecodeError`, which results in the same behavior # as that of `str.rpartition`/`unicode.rpartition`. string_type = type(parts[0]) if len(parts) == 1: # Separator not found. empty_string = string_type("") return (empty_string, empty_string, string_type(s)) else: return (string_type(sep).join(parts[:-1]), string_type(sep), string_type(parts[-1])) Viele Grüße Stefan
On 2010-08-13 15:29, Stefan Schwarzer wrote:
def rpartition(s, sep): """Implementation of `rpartition` as a function for Python < 2.5.
See http://docs.python.org/library/stdtypes.html#str.rpartition .
Warning: Not thoroughly tested. """ parts = s.split(sep) # If one of the arguments is a unicode string, returned strings # need to be unicode strings as well. `string_type(...)` may # raise a `UnicodeDecodeError`, which results in the same behavior # as that of `str.rpartition`/`unicode.rpartition`. string_type = type(parts[0]) if len(parts) == 1: # Separator not found. empty_string = string_type("") return (empty_string, empty_string, string_type(s)) else: return (string_type(sep).join(parts[:-1]), string_type(sep), string_type(parts[-1]))
Es geht wohl etwas kompakter (aber die ursprüngliche Version ist meines Erachtens klarer): def rpartition(s, sep): """Implementation of `rpartition` as a function for Python < 2.5. See http://docs.python.org/library/stdtypes.html#str.rpartition . Warning: Not thoroughly tested. """ parts = s.split(sep) # If one of the arguments is a unicode string, returned strings # are also unicode strings. `string_type(sep)` may raise a # `UnicodeDecodeError`, which is the same behavior as that of # `str.rpartition`. string_type = type(parts[0]) if len(parts) == 1: # Separator not found. returned_sep = string_type("") else: returned_sep = string_type(sep) return (string_type(sep).join(parts[:-1]), returned_sep, string_type(parts[-1])) Falls du Unittests schreiben willst, denk daran, dass `assertEqual` nicht zwischen Byte-Strings und Unicode-Strings unterscheidet. Viele Grüße Stefan
Am 13.08.2010 um 13:08 schrieb Johannes Markert:
Hallo liebe Python-Gemeinde,
ich bin aus unbeeinflussbaren Gründen auf Python 2.4 angewiesen. Und da ist die String-Operation rpartition() noch nich implementiert. Welche Alternativen gibt es für diese ältere Version?
Naja, das ist doch schnell selbst geschrieben: def rpartition(s, sep): try: left, right = s.rsplit(sep, 1) return left, sep, right except ValueError: return '', '', s assert ('www.python', '.', 'org') == rpartition('www.python.org', '.') assert ('', '', 'www.python.org') == rpartition('www.python.org', ':')
Hallo, On 2010-08-13 16:12, Diez B. Roggisch wrote:
Am 13.08.2010 um 13:08 schrieb Johannes Markert:
ich bin aus unbeeinflussbaren Gründen auf Python 2.4 angewiesen. Und da ist die String-Operation rpartition() noch nich implementiert. Welche Alternativen gibt es für diese ältere Version?
Naja, das ist doch schnell selbst geschrieben: [...]
das kommt darauf an, wie genau man das Verhalten bzgl. Byte-Strings und Unicode-Strings (ggf. gemischt) nachbilden will. ;-) Falls man nur mit Unicode-Strings arbeitet, was meist zu empfehlen ist, sollte die einfachere Variante reichen, in der man '' durch u'' ersetzt. Viele Grüße Stefan
participants (4)
-
Diez B. Roggisch
-
Johannes Markert
-
Stefan Schwarzer
-
Ulf Rompe