Скрипт очистки плейлиста.

satfan

Пользователь
Пользователь
Апр 21, 2020
98
6
8
IDLE (Python 3.10 64-bit)
Windows 10
----------------------------
Есть плейлист IPTV:
#EXTINF:-1 tvg-id="v-mire-zhivotnyx-hd" tvg-name="В мире животных HD" group-title="Познавательные" tvg-logo="https://iptvxpix.ml/v-mire-zhivotnyx.png",В мире животных HD
#EXTGRP:Познавательные
#EXTINF:-1 tvg-id="2627" tvg-name="Диалоги о рыбалке" group-title="Познавательные" tvg-logo="https://dvb.by/sources/logos/3294.png",Диалоги о рыбалке
#EXTGRP:Познавательные
#EXTINF:-1 tvg-id="55" tvg-name="Ocean TV" group-title="Познавательные" tvg-logo="https://iptvxpix.ml/ocean-tv.png",Ocean TV
#EXTGRP:Познавательные
----------------------------
Нужен простой скрипт для удаления ненужного из этого плейлиста.
Должно в итоге получится так:
#EXTINF:-1,В мире животных HD
#EXTINF:-1,Диалоги о рыбалке
#EXTINF:-1,Ocean TV
----------------------------
Что мы должны сделать:
1. В строке: #EXTINF:-1, ..... удалить всё до запятой за которой идёт название канала.
2. Удалить полностью строки: #EXTGRP: Здесь могут меняться названия групп (#EXTGRP:Познавательные #EXTGRP:Новостные и т.д)
----------------------------
Я ранее очищал Notepad++ так, не всегда срабатывает:
Открыть регулярные выражения.
В том же Notepad++ например, есть "Поиск" --> "Замена", поставить галочку "Регулярные выражения" и ввести в строку поиска например:
Найти: #EXTINF:-1 [\w=" \-.]*
А в строку "Замена" вставить: #EXTINF:-1
и нажать "Заменить всё".
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
есть идеи как делать скрипт?
 

satfan

Пользователь
Пользователь
Апр 21, 2020
98
6
8
Я пробовал такой вариант скрипта:
Python:
# -*- coding: utf-8 -*
import requests
import os
from os import listdir
from os.path import isfile, join
import re

# создаем папку playlists если ее нет
if not os.path.isdir('playlists'):
    os.mkdir('playlists')
   
    main()
# получаем список файлов плейлистов из папки playlists
playlists = [f for f in listdir('playlists') if isfile(join('playlists', f))]
for i in playlists:
    with open(f'playlists/{i}') as file_in:
        txt = file_in.read()
        txt = re.sub(r"( tvg-id.*).(\,)", ',', txt)
        txt = re.sub(r"(#EXTGRP.*).(\n)", '', txt)
        with open(f'out_{i}', 'w') as file_out:
            file_out.write(txt)
В папке playlists у меня лежит только этот один файл: UPITERR.m3u
Выдаёт ошибку:
Traceback (most recent call last):
File "C:\Users\Пк\Desktop\cleaning_plist\2.py", line 17, in <module>
txt = file_in.read()
File "C:\Python\lib\encodings\cp1251.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 6252: character maps to <undefined>
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
Попробуй указать другую кодировку при открытии файла, open(f, encoding='utf-8') например, лучше всего открыть файл вручную и посмотреть его кодировку
 

satfan

Пользователь
Пользователь
Апр 21, 2020
98
6
8
Исправляю так:
Python:
with open(f'playlists/{i}'encoding='utf-8') as file_in:

f' --- показывает ошибку. Как правильно написать эту строку ?
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
Исправляю так:
Python:
with open(f'playlists/{i}'encoding='utf-8') as file_in:

f' --- показывает ошибку. Как правильно написать эту строку ?
запятую поставить между аргументами
 

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