我有一个解析的PE文件的值列表,在每个部分的末尾包含/ x00空字节。 我希望能够从字符串中删除/ x00字节而不从文件中删除所有“x”。 我曾尝试过.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

有关最佳方式的任何想法吗?

===============>>#1 票数:10 已采纳

>>> 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', '')

===============>>#2 票数:5

lst = (i[0].rstrip('\x00') for i in List)
for j in lst: 
   print j,

===============>>#3 票数:2

你真正想要做的是在列表中的字符串中替换'\\x00'字符。

为了实现这一目标,人们常常忽略了这样一个事实:在Python 2中,非Unicode字符串translate()方法也可以选择(或仅)删除8位字符,如下所示。 (它在Python 3中不接受这个参数,因为默认情况下字符串是Unicode对象。)

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

===============>>#4 票数:1

尝试使用unicode模式,如下所示:

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'

===============>>#5 票数:1

我认为更好的方法来处理这个特定的问题是使用以下功能:

import string

for item  in List:
  filter(lambda x: x in string.printable, str(item))

这不仅会消除\\ x00,还会附加到字符串中的任何其他此类十六进制值。

===============>>#6 票数:0

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

  ask by user2292661 translate from so

未解决问题?本站智能推荐: