Отфильтровать строку и выделить значение (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