更换\\ X00在Python列表的最佳方式?(Best way to replace \\x00

2019-08-31 10:55发布

我已经从包括在每个区段的结尾/ 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?