2010-10-07 3 views
1

Je dois extraire une description d'un fichier, qui ressemble à ceci: "TES4! \ X01 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x0f \ x00 \ x00 \ x00HEDR \ x0c \ x00 \ xd7 \ xa3p? h \ x03 \ x00 \ x00 \ x00 \ x08 \ x00 \ xffCNAM \ t \ x00Martigen \ Modules Mutant x00SNAM \ xaf \ x00Mart - RC4 \ n \ nDiverses créatures & PNJ, nouvelles créatures & PNJ, taille dynamique et mise à l'échelle statistique, augmentation des spawns, amélioration de l'IA, amélioration des factions, et bien plus encore. \ n \ n \ x00MAST \ r \ x00Fallout3.esm \ x00DATA \ x08 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00MAST \ x16 \ Mutant Mod.esm \ x00Mart de x00DATA \ x08" deSe débarrasser de x ## dans les chaînes (Python)

J'ai laready compris comment obtenir la partie dont j'ai besoin, mais il y a encore des données indésirables là-dedans que je ne sais pas comment me débarrasser de: \ xaf \ xMart Mutant Mod - RC4 \ n \ nDiverses créatures & PNJ, nouvelles créatures & PNJ, taille dynamique et mise à l'échelle des statistiques, augmentation des spawns, amélioration de l'IA, amélioration des factions, et bien plus encore. \ n \ n \ x00

devrait devenir. Mutant Mod de Mart - RC4 \ n \ nDiverse créatures & PNJ, nouvelles créatures & PNJ, taille dynamique et mise à l'échelle de stat, pontes ont augmenté, une IA améliorée, des factions améliorées, et bien plus encore \ n \ n \

Fondamentalement, j'ai besoin d'un moyen de se débarrasser de la substance \ x ## (qui, si elle est laissée dedans, finira comme des caractères étranges lorsqu'elle est affichée dans l'interface graphique), mais je n'ai pas réussi à réussir ve les.

[Dans le cas où vous poseriez la question, il est des fichiers .ESP pour FO3 Je suis de déconner avec.]

Répondre

4

vous pouvez essayer:

import string 

cleaneddata = ''.join(c for c in data if c in string.printable) 

Cela suppose que vous avez déjà data dans une chaîne .

Voilà comment cela fonctionne pour moi:

>>> s = """TES4!\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00HEDR\x0c\x00\xd7\xa3p?h\x03\x00\x00\x00\x08\x00\xffCNAM\t\x00Martigen\x00SNAM\xaf\x00Mart's Mutant Mod - RC4\n\nDiverse creatures & NPCs, new creatures & NPCs, dynamic size and stat scaling, increased spawns, improved AI, improved factions, and much more.\n\n\x00MAST\r\x00Fallout3.esm\x00DATA\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00MAST\x16\x00Mart's Mutant Mod.esm\x00DATA\x08""" 
>>> print ''.join(c for c in s if c in string.printable)TES4!HEDR 
     p?hCNAM MartigenSNAMMart's Mutant Mod - RC4 

Diverse creatures & NPCs, new creatures & NPCs, dynamic size and stat scaling, increased spawns, improved AI, improved factions, and much more. 

Fallout3.esmDATAMASTMart's Mutant Mod.esmDATA 
>>> 

Pas idéal comme vous pouvez le voir, mais qui pourrait au moins être une bonne première étape.

+0

+1 afin que votre 6666 est pas aussi note :-) satanique – gtrak

4

La première chose que nous faisons est pull up some docs. Si nous regardons en bas, cela montre comment le sous-enregistrement SNAM doit être géré. Nous utilisons donc struct pour lire la longueur, puis nous saisissons autant d'octets (je suppose que vous avez oublié d'ouvrir le fichier en mode binaire, puisque le compte est désactivé dans votre exemple) à partir de la chaîne, terminée par zéro. Et puis il n'y a plus rien à faire, puisque nous avons ce pour quoi nous sommes venus.

+0

aka RTFM, LOL ;-) Bien sûr que vous savez où il suppose est et quel genre de données que vous regardez ... – martineau

+0

+1. Bien mieux que ma réponse. – aaronasterling

0

Si vous êtes au point de

\ XAF \ Mutant Mod x00Mart - RC4 \ n \ nDiverse créatures & PNJ, nouvelles créatures & PNJ, taille dynamique et mise à l'échelle de stat, fraie augmentation , IA améliorée, des factions améliorées, et beaucoup plus \ n \ n \ x00

vous pouvez faire ce qui suit pour se débarrasser de la dernière indésirable \ x ## en faisant:.

exp = re.compile(r"\\x[\w]") 
newStr = [s for s in str.split("\\x00") if not re.search(exp, s)] 
newStr = "".join(newStr) 
Questions connexes