Избавление от \ x ## в строках (Python) - PullRequest
1 голос
/ 07 октября 2010

Мне нужно извлечь описание из файла, который выглядит следующим образом: "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 \ x00 \ x08 \ x00 \ xffCNAM \ t \ x00Martigen \ x00SNAM \ xaf \ x00Mutant Mod - RC4 \ n \Разнообразные существа и неигровые персонажи, новые существа и неигровые персонажи, динамический размер и масштабирование характеристик, увеличенные спавны, улучшенный искусственный интеллект, улучшенные фракции и многое другое. \ n \ n \ x00MAST \ r \ x00Fallout3.esm \ x00DATA \ x08 \ x00 \ x00 \x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00MAST \ x16 \ x00 \ x00Mart's Mutant Mod.esm \ x00DATA \ x08 "

Я уже понял, как получить нужную мне часть, но еще есть некоторыеНежелательные данные там, от которых я не знаю, как избавиться от: \ xaf \ x00Mart's Mutant Mod - RC4 \ n \ nРазличные существа и неигровые персонажи, новые существа и неигровые персонажи, динамический размер и масштабирование характеристик, увеличенные спавны, улучшенный AI, улучшенныйфракции и многое другое. \ n \ n \ x00

должны стать: Mart's Mutant Mod - RC4 \ n \ nРазличные существа и NPC, новые существа и NPC, динамический размер и стат масштабng, увеличенные спавны, улучшенный AI, улучшенные фракции и многое другое. \ n \ n \

По сути, мне нужен способ избавиться от вещей \ x ## (которые, если их там оставить, в конечном итогекак странные символы при отображении в графическом интерфейсе), но мне не удалось успешно удалить их.

[Если вам интересно, это файлы .esp для FO3, с которыми я возиться]

Ответы [ 3 ]

4 голосов
/ 07 октября 2010

Первое, что мы делаем, это поднимаем некоторые документы . Если мы посмотрим на нижнюю часть, это показывает, как должна обрабатываться подзапись SNAM. Таким образом, мы используем struct для чтения длины, затем мы получаем столько байтов (я предполагаю, что вы забыли открыть файл в двоичном режиме, поскольку в вашем примере счетчик выключен) из строки с нулевым символом в конце. И тогда уже нечего делать, поскольку у нас есть то, для чего мы пришли.

4 голосов
/ 07 октября 2010

вы можете попробовать:

import string

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

Это предполагает, что у вас уже есть data в строке.

Вот как это работает для меня:

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

Не идеально, как вы можете видеть, но это может быть, по крайней мере, хорошим первым шагом.

0 голосов
/ 07 октября 2010

Если вы до

\ xaf \ x00Mart's Mutant Mod - RC4 \ n \ nРазличные существа и неигровые персонажи, новые существа и NPC, динамический размер и масштабирование статистики, увеличение нереста, улучшенный ИИ, улучшенные фракции и намного больше. \ n \ n \ x00

Вы можете сделать следующее, чтобы избавиться от последнего нежелательного \ x ##, выполнив:

exp = re.compile(r"\\x[\w]")
newStr = [s for s in str.split("\\x00") if not re.search(exp, s)]
newStr = "".join(newStr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...