не могу разобраться с кодировками при выводе результата работы процесса (команда tasklist)
Прошу помочь с такой проблемой: Пытаюсь посчитать количество памяти суммарно для всех приложений. В коде не стал суммировать пока, просто пытаюсь вывести данные в int, но при выполнении int(i[-13:-3]) получаю исключение ValueError: invalid literal for int() with base 10: ' 74\xa0420 ', понимаю, что, скорее всего, проблема с кодировками, но как решить не понимаю..подскажите, пожалуйста. Также в качестве эксперимента, пытался добавить срез i[-13:-3] в список в цикле с readlines(), получаю примерно такой результат [' 8 ', ' 136 ', ' 74\xa0408 ', ' 1\xa0088 ', ' 4\xa0976 ' и так далее, там куча всего.
import os
import subprocess
def get_inf():
p = subprocess.Popen('tasklist', shell = True, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
output = p.stdout.read().decode('cp866')
f = open('Buffer.txt', 'w')
f.write(output)
f.close()
f = open('Buffer.txt', 'r')
for i in f.readlines():
if i.rstrip().endswith('КБ'):
print(int(i[-13:-3]))
f.close()
def main():
get_inf()
Ответы (2 шт):
\xa0 это non-breaking space, который выглядит в точности как пробел. Можно его просто убрать из строки перед преобразованием в int:
print(int(i[-13:-3].replace('\xa0', '')))
Можно убрать все "не цифры" из строки перед преобразованием строки в число:
def to_int(num_str):
return int("".join([c for c in num_str if c.isdigit()])
print(to_int(i[-13:-3))