我已经从包括在每个区段的结尾/ X00空字节解析后的PE文件的值的列表。 我希望能够从字符串中删除/ X00字节没有从文件中删除所有的“×”。 我曾尝试做.replace和应用re.sub,但没有哪很大的成功。
使用Python 2.6.6
例。
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
>>>test (removes x, but I want to keep it) #changed from tet to test
>>>data
>>>rsrc
我想下面的输出
文本数据RSRC
对要对此最好的办法的任何想法?
Answer 1:
>>> 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']]
或修改的地方列表,而不是创建一个新的:
for x in L:
x[0] = x[0].replace('\x00', '')
Answer 2:
lst = (i[0].rstrip('\x00') for i in List)
for j in lst:
print j,
Answer 3:
你真正想要做的是取代'\x00'
在列表中的字符串的字符。
为实现这一目标,人们往往忽略了一个事实,即在Python 2中的非Unicode字符串translate()
方法也可选(或仅)删除8位字符,如下图所示。 (因为字符串是系统默认的Unicode对象 - 它不接受在Python 3这一说法。)
您的List
数据结构似乎有点奇怪,因为它只是由单一字符串中的一个元素列表的列表。 无论如何,在下面的代码我已重新命名, sections
因为大写单词只应根据被用于类的名称PEP 8 -风格指南Python代码 。
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
输出:
.text
.data
.rsrc
Answer 4:
尝试统一模式,如下所示:
re.sub(u'\x00', '', s)
它应该给下面的结果:
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
或者,使用列表理解:
[[re.sub(u'\x00', '', s) for s in x] for x in l]
其实,应该没有在前面的字符串的“U”。 只是删除第3条斜线,并以此作为你的正则表达式:
'\x00'
Answer 5:
我认为更好的方式来利用这个特定问题的护理是使用以下功能:
import string
for item in List:
filter(lambda x: x in string.printable, str(item))
这将摆脱不只是\ x00的,但被附加到字符串的任何其他这样的十六进制值。
Answer 6:
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']
文章来源: Best way to replace \\x00 in python lists?