Мне нужно найти pidlist и pmtpid с идентификатором службы в python

Содержимое файла:

serviceid=2251:tsid=6:orignetwid=99:access=clear:pids=3:clearpids=3:scrambledpids=0:packets=2315:bitrate=1745711:bitrate204=1894282:servtype=1:pmtpid=3251:pcrpid=5251:pidlist=3251,5251,6251

Код:

file = open('t5001.txt','r')

file1 = file.read()

file2 = file1.split(":")

Input = input("Enter The student ID :- ")

for i in file2:

    if Input in i:

        print(i)

file.close()

Я написал этот код, но не получил ответа, я делаю просто глупую ошибку и не могу получить этот код, может кто-нибудь поможет мне

Лучший способ сделать это: создать словарь и сохранить все элементы, чтобы вы могли легко получить его позже:

d = {}
for item in file.read().split(':'):
    key, value = item.split('=')
    d[key] = value

print(d)
# output
# {'serviceid': '2251', 'tsid': '6', 'orignetwid': '99', 'access': 'clear', 'pids': '3', 'clearpids': '3', 'scrambledpids': '0', 'packets': '2315', 'bitrate': '1745711', 'bitrate204': '1894282', 'servtype': '1', 'pmtpid': '3251', 'pcrpid': '5251', 'pidlist': '3251,5251,6251'}

Если вы хотите получить список ['3251','5251','6251'] вместо чистой строки 3251,5251,6251, добавьте еще одну проверку условия:

d = {}
for item in file.read().split(':'):
    key, value = item.split('=')
    if ',' in value:
        d[key] = value.split(',')
    else:
        d[key] = value

print(d['pidlist'])
# output
# ['3251','5251','6251']

После того, как вы составили словарь d, все становится проще:

if Input == d['serviceid']:
    print('pidlist: ', d['pidlist'])
    print('pmtpid: ', d['pmtpid'])

Почему бы не использовать функцию exec?

file = open('t5001.txt','r')

for i in file.read().split(':'):
    try:
        exec(i)
    except NameError:
        pass
#only access = clear won't be executed

file.close() 

Input = int(input("Enter The Service ID :- "))

if serviceid==Input:
    print(f'{pidlist = }\n{pmtpid = }')

У каждого & каждого значения (кроме acccess) есть ссылка на переменную с таким же именем, как в файле.

Выход:

Enter The Service ID :- 2251
pidlist = (3251, 5251, 6251)
pmtpid = 3251

Вернуться на верх