Seite 1 von 1

replace "null" character in string

Verfasst: Dienstag 4. Oktober 2005, 15:59
von mbierenfeld
In Strings habe ich den Wert 0x00. Wie kann ich diesen durch das <cr> Zeichen ersetzen

ich habe es mit

Code: Alles auswählen

nulls = "%s" % 0
newcontent.replace (nulls, "\n", 1)
Das funktioniert aber nicht so richtig. Die "nulls" kommen mehrfach vor

grüße

michael

Edit (Leonidas): Code in Python-Tags gesetzt.

Verfasst: Dienstag 4. Oktober 2005, 16:11
von Leonidas
Das ist auch zu schaffen:

Code: Alles auswählen

newcontent = newcontent.replace('\x00', '\n')

Verfasst: Dienstag 4. Oktober 2005, 16:37
von mbierenfeld
:-) hei de noi. heute stehe ich aber wirklich auf der Leitung

Code: Alles auswählen

def convert (input, output): 

    blocksize = 10000 

    inputfile = file(input, "rb")
    outputfile = open (output, "w")
    
    count = 0
    totalread = 0
    err = None
    
    while True: 

        content = inputfile.read(blocksize) 
        if content == '': 
            break 

        bytesread = len (content)
        totalread += bytesread
    
        count += 1
        if count % 100 == 0:
            print "Hallo habe [%d] gelesen" % (totalread)

        newcontent = unicode (content, 'cp273').encode('utf_8')
        
        # Das geht irgenwie immer noch nicht obwohl ich Deiner Argumentation folgen kann *gg*
        newcontent.replace ('\x00', '\n', 1)         
        
        # /me braucht Urlaub. Habs Woende durchgeackert
        
        outputfile.write (newcontent)
    
    inputfile.close() 
    outputfile.close() 
    
    return err
Noch ein letzes Mal, oder wie war das mit dem " .. du schaffst das schon"

Michael

Verfasst: Dienstag 4. Oktober 2005, 16:59
von Leonidas
Warum nimmst du immer bei Replace zwangsweise eine 1 als Count? Das bedeutet, dass nur das erste Vorkommnis ersetzt wird und das willst du ja nicht, oder?

Also wird aus:
mbieren hat geschrieben:

Code: Alles auswählen

        # Das geht irgenwie immer noch nicht obwohl ich Deiner Argumentation folgen kann *gg*
        newcontent.replace ('\x00', '\n', 1)    
einfach ein

Code: Alles auswählen

        newcontent = newcontent.replace ('\x00', '\n')    
Du musst newcontent nochmal setzen, da replace den String nicht ändert, sondern nur eine Kopie zurückliefert, in der die Zeichen ersetzt wurden.

Beispiel:

Code: Alles auswählen

In [14]: c = chr(0) * 10

In [15]: c
Out[15]: '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

In [16]: c.replace('\x00', '\n')
Out[16]: '\n\n\n\n\n\n\n\n\n\n'

danke

Verfasst: Mittwoch 5. Oktober 2005, 11:25
von mbierenfeld
das wars. muss mich erstmalwieder an python gewöhnen. Als alter C++ Mensch ist das immer wieder ungewohnt mit den String Objekten

Danke, wenn Du mal in München bist ... gibts Freibier

michael

Re: danke

Verfasst: Mittwoch 5. Oktober 2005, 20:37
von Leonidas
mbieren hat geschrieben:Danke, wenn Du mal in München bist ... gibts Freibier
Ich wohne in München.. naja fast.. etwas weiter im Norden. Danke fürs Angebot aber das passt auch so schon ;)

schmarrn

Verfasst: Donnerstag 6. Oktober 2005, 08:50
von mbierenfeld
erfahrungsaustausch ist immer gut. ich habe ganz schoene grabenkämpfe ausgestanden bis python zum einsatz kam.

marketing nach innen und aussen ist wichtig.

Re: schmarrn

Verfasst: Donnerstag 6. Oktober 2005, 15:58
von Leonidas
mbieren hat geschrieben:erfahrungsaustausch ist immer gut. ich habe ganz schoene grabenkämpfe ausgestanden bis python zum einsatz kam.
Aber du hast es geschafft. Gratuliere!
mbieren hat geschrieben:marketing nach innen und aussen ist wichtig.
Ja! Ich fänds ja auch lustig auf der Systems (auf die ich eigentlich plane zu gehen, na mal schauen wies mit den Karten wird) einen Python-Stand zu machen, vielleicht als Unterbereich eines anderen Standes :)