吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 885|回复: 11
收起左侧

[Python 转载] 用Fitten Code Chat 自动写了个修改CUE文件的python代码

[复制链接]
freckle 发表于 2024-9-10 21:02
本帖最后由 wushaominkk 于 2024-9-12 08:53 编辑

这个Fitten Code Chat是pycharm里的一个插件,官网https://code.fittentech.com/?ref=gzl


诉求,如上图,从网上下的歌曲,其CUE因抓轨的人没写歌名,但提供了歌名,需要自己修改。
程序成功了一半,使用“浏览”按键可以获取正确的文件。使用拖拽获取时,会有个{ },试了几次,弄不好,请高手帮忙修改下

[Python] 纯文本查看 复制代码
import tkinter as tk
from tkinter import filedialog, messagebox
from tkinterdnd2 import TkinterDnD, DND_FILES


def read_file(file_path):
    # 尝试使用不同的编码读取文件
    for encoding in ['utf-8', 'ansi']:
        try:
            with open(file_path, 'r', encoding=encoding) as file:
                return [line.strip() for line in file]
        except (UnicodeDecodeError, LookupError):
            continue
    raise ValueError("无法读取文件,文件编码不受支持")


def replace_track_names(cue_content, song_names):
    for i, song_name in enumerate(song_names, start=1):
        old_track = f"音轨{i:02}"
        new_track = song_name
        cue_content = cue_content.replace(old_track, new_track)
    return cue_content


def process_files():
    song_file_path = song_file_entry.get()
    cue_file_path = cue_file_entry.get()

    if not song_file_path or not cue_file_path:
        messagebox.showerror("错误", "请选择文件")
        return

    try:
        song_names = read_file(song_file_path)

        # 尝试以不同编码读取CUE文件
        cue_content = None
        for encoding in ['utf-8', 'ansi']:
            try:
                with open(cue_file_path, 'r', encoding=encoding) as cue_file:
                    cue_content = cue_file.read()
                    break
            except (UnicodeDecodeError, LookupError):
                continue

        if cue_content is None:
            raise ValueError("无法读取CUE文件,文件编码不受支持")

        new_cue_content = replace_track_names(cue_content, song_names)

        with open(cue_file_path, 'w', encoding='utf-8') as cue_file:
            cue_file.write(new_cue_content)

        messagebox.showinfo("成功", "文件处理完成")
    except Exception as e:
        messagebox.showerror("错误", f"处理文件时出错: {e}")


def browse_song_file():
    file_path = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")])
    song_file_entry.delete(0, tk.END)
    song_file_entry.insert(0, file_path)


def browse_cue_file():
    file_path = filedialog.askopenfilename(filetypes=[("CUE files", "*.cue")])
    cue_file_entry.delete(0, tk.END)
    cue_file_entry.insert(0, file_path)


def drop_song_file(event):
    song_file_entry.delete(0, tk.END)
    song_file_entry.insert(0, event.data)


def drop_cue_file(event):
    cue_file_entry.delete(0, tk.END)
    cue_file_entry.insert(0, event.data)


# 创建主窗口
root = TkinterDnD.Tk()
root.title("CUE文件音轨替换工具")

# 创建并放置标签和输入框
tk.Label(root, text="歌曲名列表文件:").grid(row=0, column=0, padx=10, pady=10)
song_file_entry = tk.Entry(root, width=50)
song_file_entry.grid(row=0, column=1, padx=10, pady=10)
song_file_entry.drop_target_register(DND_FILES)
song_file_entry.dnd_bind('<<Drop>>', drop_song_file)
tk.Button(root, text="浏览", command=browse_song_file).grid(row=0, column=2, padx=10, pady=10)

tk.Label(root, text="CUE文件:").grid(row=1, column=0, padx=10, pady=10)
cue_file_entry = tk.Entry(root, width=50)
cue_file_entry.grid(row=1, column=1, padx=10, pady=10)
cue_file_entry.drop_target_register(DND_FILES)
cue_file_entry.dnd_bind('<<Drop>>', drop_cue_file)
tk.Button(root, text="浏览", command=browse_cue_file).grid(row=1, column=2, padx=10, pady=10)

# 创建并放置处理按钮
tk.Button(root, text="处理文件", command=process_files).grid(row=2, column=1, padx=10, pady=20)

# 运行主循环
root.mainloop()

''''''
''''''
''''''
'''
def clean_path(dropped_data):
    # 移除路径中可能存在的花括号
    return dropped_data.strip("{}")

def drop_song_file(event):
    song_file_entry.delete(0, tk.END)
    file_path = clean_path(event.data)
    song_file_entry.insert(0, file_path)

def drop_cue_file(event):
    cue_file_entry.delete(0, tk.END)
    file_path = clean_path(event.data)
    cue_file_entry.insert(0, file_path)

# 创建主窗口
root = TkinterDnD.Tk()
root.title("CUE文件音轨替换工具")

# 创建并放置标签和输入框
tk.Label(root, text="歌曲名列表文件:").grid(row=0, column=0, padx=10, pady=10)
song_file_entry = tk.Entry(root, width=50)
song_file_entry.grid(row=0, column=1, padx=10, pady=10)
song_file_entry.drop_target_register(DND_FILES)
song_file_entry.dnd_bind('<<Drop>>', drop_song_file)
tk.Button(root, text="浏览", command=browse_song_file).grid(row=0, column=2, padx=10, pady=10)

tk.Label(root, text="CUE文件:").grid(row=1, column=0, padx=10, pady=10)
cue_file_entry = tk.Entry(root, width=50)
cue_file_entry.grid(row=1, column=1, padx=10, pady=10)
cue_file_entry.drop_target_register(DND_FILES)
cue_file_entry.dnd_bind('<<Drop>>', drop_cue_file)
tk.Button(root, text="浏览", command=browse_cue_file).grid(row=1, column=2, padx=10, pady=10)

# 创建并放置处理按钮
tk.Button(root, text="处理文件", command=process_files).grid(row=2, column=1, padx=10, pady=20)

# 运行主循环
root.mainloop()
'''

免费评分

参与人数 1吾爱币 +3 收起 理由
苏紫方璇 + 3 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| freckle 发表于 2024-9-11 11:01
我把它改好了,没有{}号了
[Python] 纯文本查看 复制代码
import tkinter as tk
from tkinter import filedialog, messagebox
from tkinterdnd2 import TkinterDnD, DND_FILES


def read_file(file_path):
    # 尝试使用不同的编码读取文件
    for encoding in ['utf-8', 'ansi']:
        try:
            with open(file_path, 'r', encoding=encoding) as file:
                song_names = []
                for line in file:
                    # 移除行首的2位数字和".",再去除两端的空白字符
                    clean_name = line.strip()[3:]
                    song_names.append(clean_name)
                return song_names
        except (UnicodeDecodeError, LookupError):
            continue
    raise ValueError("无法读取文件,文件编码不受支持")



def replace_track_names(cue_content, song_names):
    for i, song_name in enumerate(song_names, start=1):
        old_track = f"音轨{i:02}"
        new_track = song_name
        cue_content = cue_content.replace(old_track, new_track)
    return cue_content


def process_files():
    song_file_path = song_file_entry.get()
    cue_file_path = cue_file_entry.get()

    if not song_file_path or not cue_file_path:
        messagebox.showerror("错误", "请选择文件")
        return

    try:
        song_names = read_file(song_file_path)

        # 尝试以不同编码读取CUE文件
        cue_content = None
        for encoding in ['utf-8', 'ansi']:
            try:
                with open(cue_file_path, 'r', encoding=encoding) as cue_file:
                    cue_content = cue_file.read()
                    break
            except (UnicodeDecodeError, LookupError):
                continue

        if cue_content is None:
            raise ValueError("无法读取CUE文件,文件编码不受支持")

        new_cue_content = replace_track_names(cue_content, song_names)

        with open(cue_file_path, 'w', encoding='utf-8') as cue_file:
            cue_file.write(new_cue_content)

        messagebox.showinfo("成功", "文件处理完成")
    except Exception as e:
        messagebox.showerror("错误", f"处理文件时出错: {e}")


def browse_song_file():
    file_path = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")])
    song_file_entry.delete(0, tk.END)
    song_file_entry.insert(0, file_path)


def browse_cue_file():
    file_path = filedialog.askopenfilename(filetypes=[("CUE files", "*.cue")])
    cue_file_entry.delete(0, tk.END)
    cue_file_entry.insert(0, file_path)


def drop_song_file(event):
    file_path = event.data.strip('{}')  # 删除路径中的花括号{}
    song_file_entry.delete(0, tk.END)
    song_file_entry.insert(0, file_path)


def drop_cue_file(event):
    file_path = event.data.strip('{}')  # 删除路径中的花括号{}
    cue_file_entry.delete(0, tk.END)
    cue_file_entry.insert(0, file_path)



# 创建主窗口
root = TkinterDnD.Tk()
root.title("CUE文件音轨替换工具")

# 创建并放置标签和输入框
tk.Label(root, text="歌曲名列表文件:").grid(row=0, column=0, padx=10, pady=10)
song_file_entry = tk.Entry(root, width=50)
song_file_entry.grid(row=0, column=1, padx=10, pady=10)
song_file_entry.drop_target_register(DND_FILES)
song_file_entry.dnd_bind('<<Drop>>', drop_song_file)
tk.Button(root, text="浏览", command=browse_song_file).grid(row=0, column=2, padx=10, pady=10)

tk.Label(root, text="CUE文件:").grid(row=1, column=0, padx=10, pady=10)
cue_file_entry = tk.Entry(root, width=50)
cue_file_entry.grid(row=1, column=1, padx=10, pady=10)
cue_file_entry.drop_target_register(DND_FILES)
cue_file_entry.dnd_bind('<<Drop>>', drop_cue_file)
tk.Button(root, text="浏览", command=browse_cue_file).grid(row=1, column=2, padx=10, pady=10)

# 创建并放置处理按钮
tk.Button(root, text="处理文件", command=process_files).grid(row=2, column=1, padx=10, pady=20)

# 运行主循环
root.mainloop()

Nanoha123 发表于 2024-9-11 11:06
本帖最后由 Nanoha123 于 2024-9-11 11:13 编辑

虽然,之前叫别人也写了一个类似脚本,不过使用比较复杂而且 文本编码支持差点意思,有些特殊符号资料utf-8显示才正常

不知道是否支持多编码文本替换?
kaijinaini 发表于 2024-9-10 23:33
666666666666666666666

免费评分

参与人数 1吾爱币 -10 收起 理由
wushaominkk -10 请勿灌水,提高回帖质量是每位会员应尽的义务!

查看全部评分

xixicoco 发表于 2024-9-10 23:51
ai写代码吗??
 楼主| freckle 发表于 2024-9-11 08:16

应该是AI,我自己可不会写,看都看不懂,也就知道一点肤浅的基础
不苦小和尚 发表于 2024-9-11 08:22
免费的吗
 楼主| freckle 发表于 2024-9-11 10:20

应该是免费的吧,没看到要收费
 楼主| freckle 发表于 2024-9-11 14:16
Nanoha123 发表于 2024-9-11 11:06
虽然,之前叫别人也写了一个类似脚本,不过使用比较复杂而且 文本编码支持差点意思,有些特殊符号资料utf-8 ...

'utf-8'和'ansi'两种,我遇到这2种,就让它写了这2种
Nanoha123 发表于 2024-9-11 20:50
freckle 发表于 2024-9-11 14:16
'utf-8'和'ansi'两种,我遇到这2种,就让它写了这2种

不知道,怎么封装?
大佬可以发一份可以运行的文件吗,表示不太会弄
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表