crea un editor m3u
To upload files, please first save the app
import streamlit as st
import pandas as pd
from io import StringIO
import csv
st.title("M3U Playlist Editor")
def parse_m3u(content):
"""Parse M3U content into a DataFrame"""
lines = content.split('\n')
entries = []
current_entry = {}
for line in lines:
line = line.strip()
if not line:
continue
if line.startswith('#EXTINF:'):
# Parse the EXTINF line
info = line[8:].split(',', 1)
duration = info[0]
title = info[1] if len(info) > 1 else ''
current_entry = {'duration': duration, 'title': title}
elif not line.startswith('#'):
# This is a URL line
if current_entry:
current_entry['url'] = line
entries.append(current_entry)
current_entry = {}
else:
entries.append({'duration': '', 'title': '', 'url': line})
return pd.DataFrame(entries)
def create_m3u(df):
"""Create M3U content from DataFrame"""
output = "#EXTM3U\n"
for _, row in df.iterrows():
if row['title'] or row['duration']:
output += f"#EXTINF:{row['duration']},{row['title']}\n"
output += f"{row['url']}\n"
return output
# Initialize session state for DataFrame
if 'data' not in st.session_state:
st.session_state.data = pd.DataFrame(columns=['duration', 'title', 'url'])
# File upload
uploaded_file = st.file_uploader("Upload M3U file", type=['m3u'])
if uploaded_file:
content = uploaded_file.getvalue().decode()
st.session_state.data = parse_m3u(content)
# Add new entry form
st.subheader("Add New Entry")
col1, col2, col3 = st.columns(3)
with col1:
duration = st.text_input("Duration (seconds)", "")
with col2:
title = st.text_input("Title", "")
with col3:
url = st.text_input("URL", "")
if st.button("Add Entry"):
new_entry = pd.DataFrame([{
'duration': duration,
'title': title,
'url': url
}])
st.session_state.data = pd.concat([st.session_state.data, new_entry], ignore_index=True)
# Display and edit entries
st.subheader("Playlist Entries")
edited_df = st.data_editor(
st.session_state.data,
num_rows="dynamic",
column_config={
"duration": st.column_config.TextColumn("Duration"),
"title": st.column_config.TextColumn("Title"),
"url": st.column_config.TextColumn("URL"),
},
hide_index=True,
)
st.session_state.data = edited_df
# Export button
if not st.session_state.data.empty:
m3u_content = create_m3u(st.session_state.data)
st.download_button(
label="Download M3U",
data=m3u_content,
file_name="playlist.m3u",
mime="text/plain"
)
# Display preview
if not st.session_state.data.empty:
st.subheader("M3U Preview")
st.text(m3u_content)
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?