You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中字典列表形式播放列表的CSV保存与导入问题

播放列表CSV存/取问题解决方法

原代码问题分析

你之前的代码导入时只能拿到单个字符,核心问题在于:

  • 保存时直接把Python列表对象写入CSV,CSV会自动将其转为普通字符串(比如[{'url': 'xxx'}, ...]),但这并非可解析的结构化格式。
  • 导入时通过切片row[1][2:][:-1]处理字符串,本质还是在操作字符串内容,没有将其还原为真正的列表/字典对象,所以访问索引只会拿到字符串的单个字符。

修正后的实现方案

我们用JSON来序列化/反序列化播放列表数据,因为JSON天然支持字典、列表这类结构的字符串转换,能保证数据完整且可解析。

1. 保存播放列表函数

import json
import os
import csv
import sys

def SavePlaylist():
    name = SearchBox.get().strip()
    # 校验播放列表非空且名称有效
    if len(playlist) > 1 and name:
        # 将字典列表序列化为JSON字符串,保留中文等非ASCII字符
        playlist_json = json.dumps(playlist, ensure_ascii=False)
        # 构造CSV行:名称 + 序列化后的播放列表
        csv_row = [name, playlist_json]
        file_path = os.path.join(sys.path[0], "AntiTubePlaylists.txt")
        # 写入CSV,指定分隔符为§,避免和内容中的逗号冲突
        with open(file_path, "a", newline="", encoding="utf-8") as f:
            writer = csv.writer(f, delimiter="§")
            writer.writerow(csv_row)

2. 导入播放列表代码

import json
import os
import csv
import sys

file_path = os.path.join(sys.path[0], "AntiTubePlaylists.txt")
with open(file_path, "r", encoding="utf-8") as csv_file:
    reader = csv.reader(csv_file, delimiter="§")
    for row in reader:
        # 跳过格式不完整的行,避免索引错误
        if len(row) != 2:
            continue
        playlist_name, playlist_json = row
        # 将JSON字符串还原为字典列表
        playlist_data = json.loads(playlist_json)
        # 现在可以正常访问播放列表的字典元素
        print(playlist_data[0])
        # 绑定菜单命令,用lambda参数捕获当前循环的播放列表数据
        playlistmenu.add_command(
            label=playlist_name,
            command=lambda p=playlist_data: ImportPlaylist(p)
        )

关键优化点

  • JSON序列化:用json.dumps()和json.loads()实现Python对象与字符串的可靠转换,完全保留原数据结构。
  • CSV格式规范:明确指定分隔符§,避免内容中的逗号、引号破坏CSV结构;写入时加newline=""防止Windows下生成空行。
  • 变量捕获修复:lambda中用p=playlist_data绑定当前循环的播放列表数据,避免所有菜单命令都指向最后一个播放列表的问题。
  • 异常防护:增加行长度检查,跳过格式错误的行,避免程序崩溃。

内容的提问来源于stack exchange,提问作者Willem van Houten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:15:38