【问题标题】:Python search for a start hex string, save the hex string after that to a new filePython搜索开始的十六进制字符串,之后将十六进制字符串保存到新文件中
【发布时间】:2016-08-29 11:17:16
【问题描述】:

Python

我想打开一个文本文件,搜索以 45 3F 开头的 HEX 模式,获取以下十六进制 6 HEX 值,例如 45 4F 5D 并将所有这些放入一个新文件中。我也知道它总是以 00 00 结尾。

所以文件看起来像: bla bla sdsfsdf 45 3F 08 DF 5D 00 00 dsafasdfsadf 45 3F 07 D3 5F 00 00 xztert

并且应该像这样放在一个新文件中: 08 东风5D 07 D3 5F

我该怎么做?

我试过了:

output = open('file.txt','r')
my_data = output.read()
print re.findall(r"45 3F[0-9a-fA-F]", my_data)

但它只打印:

[]

有什么建议吗?

谢谢你:-)

【问题讨论】:

  • 您的示例数据在3F 之后有一个空格,您的正则表达式不允许这样做。
  • 您的正则表达式也只查找单个字符。你想使用'45 3F ([0-9A-F]{2} [0-9A-F]{2} [0-9A-F]{2})'
  • 这个文件有二进制数据还是 ASCII 中的十六进制值(即文本文件)?因为这是两个不同的东西。
  • 现在一切正常,谢谢 :-)

标签: python


【解决方案1】:

这是一个完整的答案(Python 3):

with open('file.txt') as reader:
    my_data = reader.read()

matches = re.findall(r"45 3F ([0-9A-F]{2} [0-9A-F]{2} [0-9A-F]{2})", my_data)
data_to_write = " ".join(matches)
with open('out.txt', 'w') as writer:
    writer.write(data_to_write)

re.findall返回捕获组,所以不需要清除'45 3F'。

处理文件时,使用with open,这样缩进结束时文件描述符就会被释放。

如果您想动态接受前两个八位字节:

search_string = raw_input()
regex_pattern = search_string.upper() + r" ([0-9A-F]{2} [0-9A-F]{2} [0-9A-F]{2})"
matches = re.findall(regex_pattern, my_data)

【讨论】:

  • 你好,有谁知道我如何从终端定义搜索/模式值,并使用这个值来找到想要的 HEX?我试过这样:打印“在日志文件中输入想要的值之前的字符串:” search_string = raw_input() 然后:matches = re.findall(r'(search_string) ([0-9A-F]{2} [0-9A-F]{2} [0-9A-F]{2})', my_data) 但它不起作用。请问有什么想法吗?谢谢
  • 我用动态输入的解决方案编辑了答案。如果对您有所帮助,请不要忘记将答案标记为已接受:)
  • 现在被标记为接受了吗?我不太确定我是否这样做了,但我按下了向上箭头和 V 符号。
猜你喜欢
  • 2021-12-16
  • 2010-10-04
  • 2014-03-07
  • 2023-04-08
  • 2019-07-27
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多