Отфильтровать строку и выделить значение (Python)

Есть часть вывода в консоли(Windows). Это результат отработанной утилиты. Нужно с помощью питона выделить одну строку - "| | +- Temperature #1 : 37 37 37 (/lpc/it8686e/temperature/0)" И в этой строке взять первое числовой значение в данном случае = 37 и вывести его либо обратно в консоль либо записать в текстовый файлик. Нужно брать именно первое числовое значение.

    Open Hardware Monitor Report

--------------------------------------------------------------------------------

Version: 0.9.2.0

--------------------------------------------------------------------------------

Common Language Runtime: 4.0.30319.42000
Operating System: Microsoft Windows NT 10.0.19044.0
Process Type: 64-Bit

--------------------------------------------------------------------------------

Sensors

|
+- Gigabyte B360M DS3H (/mainboard)
|  |
|  +- ITE IT8686E (/lpc/it8686e)
|  |  +- Voltage #1     :    0.708    0.708    1.056 (/lpc/it8686e/voltage/0)
|  |  +- Voltage #2     :     2.04    2.028     2.04 (/lpc/it8686e/voltage/1)
|  |  +- Voltage #3     :    2.028    2.016    2.028 (/lpc/it8686e/voltage/2)
|  |  +- Voltage #4     :    2.004    1.992    2.016 (/lpc/it8686e/voltage/3)
|  |  +- Voltage #5     :     0.06     0.06    0.348 (/lpc/it8686e/voltage/4)
|  |  +- Voltage #6     :     1.08     1.08     1.08 (/lpc/it8686e/voltage/5)
|  |  +- Voltage #7     :    1.224    1.224    1.224 (/lpc/it8686e/voltage/6)
|  |  +- Standby +3.3V  :    3.408    3.408    3.408 (/lpc/it8686e/voltage/7)
|  |  +- VBat           :    3.168    3.168    3.168 (/lpc/it8686e/voltage/8)
|  |  +- Temperature #1 :       37       37       37 (/lpc/it8686e/temperature/0)
|  |  +- Temperature #2 :       35       35       35 (/lpc/it8686e/temperature/1)
|  |  +- Temperature #3 :       21       19       25 (/lpc/it8686e/temperature/2)
|  |  +- Temperature #5 :       28       28       28 (/lpc/it8686e/temperature/4)
|  |  +- Temperature #6 :       28       28       29 (/lpc/it8686e/temperature/5)
|  |  +- Fan #1         :  1088.71     1080  1088.71 (/lpc/it8686e/fan/0)

Ответы (2 шт):

Автор решения: CrazyElf

Да всё просто же:

  • перебираете строки
  • ищете вхождение нужной строки
  • выделяете нужное место через split
text = """
    Open Hardware Monitor Report

--------------------------------------------------------------------------------

Version: 0.9.2.0

--------------------------------------------------------------------------------

Common Language Runtime: 4.0.30319.42000
Operating System: Microsoft Windows NT 10.0.19044.0
Process Type: 64-Bit

--------------------------------------------------------------------------------

Sensors

|
+- Gigabyte B360M DS3H (/mainboard)
|  |
|  +- ITE IT8686E (/lpc/it8686e)
|  |  +- Voltage #1     :    0.708    0.708    1.056 (/lpc/it8686e/voltage/0)
|  |  +- Voltage #2     :     2.04    2.028     2.04 (/lpc/it8686e/voltage/1)
|  |  +- Voltage #3     :    2.028    2.016    2.028 (/lpc/it8686e/voltage/2)
|  |  +- Voltage #4     :    2.004    1.992    2.016 (/lpc/it8686e/voltage/3)
|  |  +- Voltage #5     :     0.06     0.06    0.348 (/lpc/it8686e/voltage/4)
|  |  +- Voltage #6     :     1.08     1.08     1.08 (/lpc/it8686e/voltage/5)
|  |  +- Voltage #7     :    1.224    1.224    1.224 (/lpc/it8686e/voltage/6)
|  |  +- Standby +3.3V  :    3.408    3.408    3.408 (/lpc/it8686e/voltage/7)
|  |  +- VBat           :    3.168    3.168    3.168 (/lpc/it8686e/voltage/8)
|  |  +- Temperature #1 :       37       37       37 (/lpc/it8686e/temperature/0)
|  |  +- Temperature #2 :       35       35       35 (/lpc/it8686e/temperature/1)
|  |  +- Temperature #3 :       21       19       25 (/lpc/it8686e/temperature/2)
|  |  +- Temperature #5 :       28       28       28 (/lpc/it8686e/temperature/4)
|  |  +- Temperature #6 :       28       28       29 (/lpc/it8686e/temperature/5)
|  |  +- Fan #1         :  1088.71     1080  1088.71 (/lpc/it8686e/fan/0)
"""

for line in text.split('\n'):
    if 'Temperature #1' in line:
        print(line.split(':')[1].split()[0])

Вывод:

37

Вариант, если читать из сформированного файла с выводом утилиты:

with open(r'C:\OpenHardwareMonitor\OpenHardwareMonitorReport.txt') as f:
    for line in f:
        if 'Temperature #1' in line:
            print(line.split(':')[1].split()[0])
→ Ссылка
Автор решения: Portick

Вот так сейчас работает. Обычный бат файл

@echo off
setlocal enabledelayedexpansion

:repeat

set sum=1
set div=1

call start /B /wait C:\OpenHardwareMonitor\OpenHardwareMonitorReport.exe ReportToFile --IgnoreMonitorGPU --IgnoreMonitorFanController --IgnoreMonitorHDD --IgnoreMonitorRAM --file C:\OpenHardwareMonitor\OpenHardwareMonitorReport.txt
find "Temperature #3" C:\OpenHardwareMonitor\OpenHardwareMonitorReport.txt | find "   " | find "/lpc/it8688e/temperature/2" >C:\OpenHardwareMonitor\Result.txt
for /f "tokens=7 delims= " %%i in (C:\OpenHardwareMonitor\Result.txt) do (set /a sum=!sum!+%%i
    set /a div=!div!+1
)
echo %sum% >C:\OpenHardwareMonitor\temperature.txt

timeout /t 60

goto repeat
→ Ссылка