Конвентирование строк в файле из 3х строк в 2х строковый

daradan

Новичок
Пользователь
Май 18, 2020
7
0
1
Здравствуйте.
Помогите пожалуйста реализовать следующее:
Код:
#EXTM3U
#EXTINF:0 tvg-rec="1",РБК-ТВ
#EXTGRP:новости
http://xxx/iptv/yyy/106/index.m3u8
---------- тут новой строки нет, создал для наглядности
#EXTINF:0 tvg-rec="0",Пятый канал
#EXTGRP:новости
http://xxx/iptv/yyy/112/index.m3u8
---------- тут новой строки нет, создал для наглядности
#EXTINF:0 tvg-rec="0",Ностальгия
#EXTGRP:кино
http://xxx/iptv/yyy/102/index.m3u8
---------- тут новой строки нет, создал для наглядности
#EXTINF:0 tvg-rec="1",СТС Love
#EXTGRP:кино
http://xxx/iptv/yyy/103/index.m3u8
...
Код:
#EXTM3U
#EXTINF:0 group-title="Новости" tvg-name="РБК-ТВ" tvg-logo="https://some_site/РБК-ТВ.png" tvg-rec="1",РБК-ТВ
http://xxx/iptv/yyy/106/index.m3u8
---------- тут новой строки нет, создал для наглядности
#EXTINF:0 group-title="Новости" tvg-name="Пятый канал" tvg-logo="https://some_site/Пятый канал.png" tvg-rec="0",Пятый канал
http://xxx/iptv/yyy/112/index.m3u8
---------- тут новой строки нет, создал для наглядности
#EXTINF:0 group-title="Кино" tvg-name="Ностальгия" tvg-logo="https://some_site/Ностальгия.png" tvg-rec="0",Ностальгия
http://xxx/iptv/yyy/102/index.m3u8
---------- тут новой строки нет, создал для наглядности
#EXTINF:0 group-title="Кино" tvg-name="СТС Love" tvg-logo="https://some_site/СТС Love.png" tvg-rec="1",СТС Love
http://xxx/iptv/yyy/103/index.m3u8
...
Попытался как то написать, но так и не смог реализовать список result, чтобы из него в дальнейшем перенести на новый файл m3u8, но не могу сделать перебор из внутри key словаря. Получаю только первые значения групп ((
Python:
#import requests
#
#
# url = 'http://some_site.kz/playlist.m3u8'
# myfile = requests.get(url)
# open('_7.m3u8', 'wb').write(myfile.content)
groupSet = set()
channelsDict = {}
result = []
with open('_7.m3u8', 'r', encoding='utf8') as playlist1:
    for line1 in playlist1:
        if line1.find('#EXTGRP:') != -1:
            group = line1.replace('#EXTGRP:', '').strip()
            if group != 'HD':
                group = group[0].upper() + group[1:]
            groupSet.add(group)
            name = prev_line.strip().split(',')
            urls = next(playlist1)
            channelsDict.setdefault(group, []).append(name)
            channelsDict.setdefault(group, []).append(urls)
        prev_line = line1
#channels.pop('Новости')
#channels.pop('Кино')
result.append('#EXTM3U\n')
for grp, chnlUrl in channelsDict.items():
    result.append(f'{chnlUrl[0][0].lstrip()} group-title="{grp}" tvg-name="{chnlUrl[0][1]}",{chnlUrl[0][1]}\n{chnlUrl[1]}')
print(*result)
В коде мне необходимо иметь возможность удалять по группе, к примеру:
Python:
#channels.pop('Новости')
#channels.pop('Кино')
  1. ОС windows 10
  2. Python (3.8.2)
  3. библиотека requests
 

Вложения

  • _7.zip
    12,6 КБ · Просмотры: 1
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот простой пример на срезах без регулярок:
Python:
# список словарей
# пример словаря: {'tvg-name': 'РБК-ТВ', 'tvg-rec': 'tvg-rec="1"', 'tvg-logo': 'https://some_site/РБК-ТВ.png', 'group-title': 'новости', 'link': 'http://some_site.kz/iptv/some_site_id/106/index.m3u8'}
json_list = []
# формирование списка
with open('_7.m3u8', 'r', encoding='utf-8') as f:
    temp_dict = {}
    for i in f:
        if '#EXTINF' in i:
            temp_dict['tvg-name'] = i.split(',')[1].strip()
            temp_dict['tvg-rec'] = i.split(',')[0][10:]
            temp_dict['tvg-logo'] = 'https://some_site/' + temp_dict['tvg-name'] + '.png'
        elif '#EXTGRP' in i:
            temp_dict['group-title'] = i.replace('#EXTGRP:', '').strip()
        elif 'http' in i:
            temp_dict['link'] = i.strip()
            json_list.append(temp_dict)
            temp_dict = {}

# запись списка в файл в нужном формате
with open('without_news.txt', 'w', encoding='utf-8') as f:
    for d in json_list:
        # не включая группу новости
        if d['group-title'] != 'новости':
            f.write(f'''#EXTINF:0 group-title="{d['group-title']}" tvg-name="{d['tvg-name']}" tvg-logo="{d['tvg-logo']}" {d['tvg-rec']},{d['tvg-name']}''' + '\n')
            f.write(d['link'] + '\n')
 
  • Мне нравится
Реакции: daradan

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Подскажите, я никак не могу понять логику, т.е. как это работает данный код:
Python:
if d['group-title'] != 'новости':
и еще как быть, если хочу несколько групп исключить, тогда получится примерно так?
Python:
if d['group-title'] != 'новости' and d['group-title'] != 'кино' and d['group-title'] != 'спорт':
Логика простая - если в данном словаре d значение ключа 'group-title' не равно значению, которое нужно исключить, то записываем его в файл в нужном формате. Исключить несколько групп можно так:
Python:
if d['group-title'] not in ['новости', 'кино', 'спорт']:
 
  • Мне нравится
Реакции: daradan

daradan

Новичок
Пользователь
Май 18, 2020
7
0
1
stud_55, спасибо большое!
Алгоритм действии классный. Сперва в словарь 3 строки по необходимым ключам и этот словарь в список и т.д..
Подскажите, я никак не могу понять логику, т.е. как это работает данный код:
Python:
if d['group-title'] != 'новости':
и еще как быть, если хочу несколько групп исключить, тогда получится примерно так?
Python:
if d['group-title'] != 'новости' and d['group-title'] != 'кино' and d['group-title'] != 'спорт':
 

daradan

Новичок
Пользователь
Май 18, 2020
7
0
1
Логика простая - если в данном словаре d значение ключа 'group-title' не равно значению, которое нужно исключить, то записываем его в файл в нужном формате.
Спасибо большое! Теперь все понятно!
 

Форум IT Специалистов