У нас есть большой файл журнала, содержащий следующие две строки:
00 LOG | Cycles Run: 120001
00 LOG ! Virtual: Max> ?????????? bytes (?.???? gb), Current> 640733184 bytes (?.???? gb).
00 LOG ! Virtual: Max> 1082470400 bytes (?.???? gb), Current> ????????? bytes (?.???? gb).
00 LOG ! Actual: Max> ????????? bytes (?.???? gb), Current> 472154112 bytes (?.???? gb).
00 LOG ! Actual: Max> 861736960 bytes (?.???? gb), Current> ????????? bytes (?.???? gb).
Поскольку файл журнала имеет большой размер, мы хотим читать построчно (чтобы не читать весь текст одновременно в буфере), сопоставлять определенный набор шаблонов и выбирать значения в отдельных переменных.
например.
00 LOG | Cycles Run: 120001
Мы хотим выбрать 120001
и сохранить в переменной скажем cycle
.
С другой стороны, мы анализируем эти строки:
00 LOG ! Virtual: Max> ?????????? bytes (?.???? gb), Current> 640733184 bytes (?.???? gb).
00 LOG ! Virtual: Max> 1082470400 bytes (?.???? gb), Current> ????????? bytes (?.???? gb).
00 LOG ! Actual: Max> ????????? bytes (?.???? gb), Current> 472154112 bytes (?.???? gb).
00 LOG ! Actual: Max> 861736960 bytes (?.???? gb), Current> ????????? bytes (?.???? gb).
Символы, отмеченные ?
, могут быть любыми цифрами.
Мы хотим хранить vairables следующим образом:
640733184
в вари virtual_cur
1082470400
в вари virtual_max
472154112
в вари actual_cur
861736960
в вари actual_max
Написал фрагмент в Python 3.6
, но печатает пустой список:
import re
filename = "test.txt"
with open(filename) as fp:
line = fp.readline()
while line:
cycle_num = re.findall(r'00 LOG | Cycles Run: (.*?)',line,re.DOTALL)
line = fp.readline()
print (cycle_num[0])
ПРИМЕЧАНИЕ: я хочу выбрать каждое значение в отдельных переменных и использовать его
позже. Нужно установить 5 шаблонов по одному, выбрать значение, если оно совпадает
любой конкретный шаблон и поместить его в соответствующую переменную.
Не уверен насчет подстановочного знака для второго шаблона.
Пожалуйста, предложите нам способ сделать это эффективно.