Beste Weg, um \ x00 in Python-Listen zu ersetzen?

Ich habe eine Liste von Werten aus einer geparsten PE-Datei, die / x00 Null-Bytes am Ende jedes Abschnitts enthalten. Ich möchte in der Lage sein, die / x00 Bytes aus der Zeichenfolge zu entfernen, ohne alle "x" s aus der Datei zu entfernen. Ich habe versucht, es zu tun, und re.sub, aber nicht was viel Erfolg.

Verwenden von Python 2.6.6

Beispiel.

import re List = [['.text\x00\x00\x00'], ['.data\x00\x00\x00'], ['.rsrc\x00\x00\x00']] while count < len(List): test = re.sub('\\\\x00', '', str(list[count]) print test count += 1 >>>tet (removes x, but I want to keep it) >>>data >>>rsrc 

Ich möchte die folgende Ausgabe bekommen

Textdaten rsrc

Irgendwelche Ideen auf dem besten Weg, um dies zu gehen?

  • Wie man mit Unicode in Python arbeitet?
  • Python Ersetzen \\ mit \
  • Ersetzen Sie den String mit dem Wert des Wörterbuchs
  • Ersetzen eines Wortes in einer Liste mit einem Wert aus einem Dict
  • Python ersetzt mehrere Strings
  • PHP-Äquivalent von Pythons "Str.format" -Methode?
  • 6 Solutions collect form web for “Beste Weg, um \ x00 in Python-Listen zu ersetzen?”

     >>> L = [['.text\x00\x00\x00'], ['.data\x00\x00\x00'], ['.rsrc\x00\x00\x00']] >>> [[x[0]] for x in L] [['.text\x00\x00\x00'], ['.data\x00\x00\x00'], ['.rsrc\x00\x00\x00']] >>> [[x[0].replace('\x00', '')] for x in L] [['.text'], ['.data'], ['.rsrc']] 

    Oder um die Liste zu ändern, anstatt eine neue zu erstellen:

     for x in L: x[0] = x[0].replace('\x00', '') 
     lst = (i[0].rstrip('\x00') for i in List) for j in lst: print j, 

    Was du wirklich tun willst, ersetzt '\x00' Zeichen in Strings in einer Liste.

    Für dieses Ziel übersehen die Menschen oft die Tatsache, dass in Python 2 die Nicht-Unicode-Zeichenfolge translate() -Methode auch optional (oder nur) 8-Bit-Zeichen löschen kann, wie unten dargestellt. (Es akzeptiert dieses Argument in Python 3 nicht, da Strings standardmäßig Unicode-Objekte sind.)

    Ihre List Datenstruktur scheint ein wenig seltsam, da es sich um eine Liste von Ein-Element-Listen handelt, die nur aus einzelnen Strings bestehen. Unabhängig davon, in dem Code unten habe ich umbenannt es sections seit Groß geschriebene Wörter sollten nur für die Namen der Klassen nach PEP 8 – Style Guide für Python Code verwendet werden .

     sections = [['.text\x00\x00\x00'], ['.data\x00\x00\x00'], ['.rsrc\x00\x00\x00']] for section in sections: test = section[0].translate(None, '\x00') print test 

    Ausgabe:

     .text .data .rsrc 
     from itertools import chain List = [['.text\x00\x00\x00'], ['.data\x00\x00\x00'], ['.rsrc\x00\x00\x00']] new_list = [x.replace("\x00", "") for x in chain(*List)] #['.text', '.data', '.rsrc'] 

    Versuche ein Unicode-Muster wie folgt:

     re.sub(u'\x00', '', s) 

    Es sollte folgende Ergebnisse geben:

     l = [['.text\x00\x00\x00'], ['.data\x00\x00\x00'], ['.rsrc\x00\x00\x00']] for x in l: for s in l: print re.sub(u'\x00', '', s) count += 1 .text .data .rsrc 

    Oder mit Listenverständnissen:

     [[re.sub(u'\x00', '', s) for s in x] for x in l] 

    Eigentlich sollte man ohne das 'u' vor der Saite arbeiten. Entfernen Sie einfach die ersten 3 Schrägstriche und verwenden Sie diese als Ihr Regex-Muster:

     '\x00' 

    Ich denke, ein besserer Weg, um auf dieses besondere Problem zu kümmern ist, die folgende Funktion zu verwenden:

     import string for item in List: filter(lambda x: x in string.printable, str(item)) 

    Dies wird loszuwerden, nicht nur \ x00 aber alle anderen solchen Hex-Werte, die an Ihre Zeichenfolge angehängt sind.

    Python ist die beste Programmiersprache der Welt.