2015-02-17 2 views
0

Я ищу способ получить шестнадцатеричный номер из строки.Найти строку с Python?

Это большой файл, и я могу найти номер так:

Линия начинается с «.text» (это первый один, который начинается с .text). Эта строка содержит 3 HexNumbers, и мне нужно каждый раз второй.

Проблема в том, что позиции чисел не каждый раз одни и те же, а длина не всегда одинакова.

линия выглядит

.text  0x00000  0x4e32  0x11000000 

между номерами есть несколько пробелов, не то же самое каждый раз.

Как я могу получить и сохранить 0x4e32?

Я пытался начать так:

for num, line in enumerate(mapfile, 1): 
    line = line.rstrip() 
    if line.startswith('.text '): 
     foundLine = line 
     strCheck = "0x" 
     lineNumber = num 
     col = foundLine.find(strCheck)+1 
     print lineNumber, col   

     index = 0 
     maxLen = 60 
     while index < len(line): 
      index = line.find('0x', index) 
      if index == -1: 
       break 
     print('Code Size found at', index) 
     index += 2 

ответ

1

После того, как строка начинается с .text, разделить его и третий пункт будет ваша целевая величина:

with open('large_file.txt') as f: 
    for number,line in enumerate(f): 
     if line.startswith('.text'): 
      bits = line.split() 
      try: 
       print('Found at line # {} - {}'.format(number, bits[2])) 
      except IndexError: 
       print('Malformed line: {}'.format(line)) 
+0

ТНХ работал нормально для меня. – HightronicDesign

0
import re 
p = re.compile(r'^\.text\s*\S+\s*(\S+)', re.MULTILINE) 
test_str = ".text 0x00000 0x4e32 0x11000000" 

re.findall(p, test_str) 

Вы можете перебрать строки применить это регулярное выражение для каждой строки и получить свой result.If файл не большой, то вы можете загрузить файл, пока в памяти, а затем appy regex для получения результатов за один раз.

1

Метод .split() без аргумента разделяет строку в пробеле. Это означает, что будет выполняться любое количество пробелов, и поведение будет одинаковым с одной или сто пробелами между словами. Затем просто регулярно обращайтесь с индексом слова, которое вы хотите.

например.

words = line.split() 
words[2] 
Смежные вопросы