耳机网-耳机大家坛
标题:
避免Roon等数播系统文件名错误的小技巧
[打印本页]
作者:
中关村东路
时间:
2023-2-12 21:28
标题:
避免Roon等数播系统文件名错误的小技巧
本帖最后由 中关村东路 于 2023-2-12 21:41 编辑
在Roon官方论坛和PNA用户群里都见到有用户提到有音乐文件名不规范,导致软件不能解析,重则系统假死轻则不能播放等各种问题。这里提供一个我使用的一段跑在Linux NAS上的Python脚本,供理工科的烧友和公司使用。不是程序员水平有限,只保证这段代码直接运行有效,在我和朋友的机器上稳定运行了两年了吧;毕竟是数据相关,自己有特殊需求想修改的请谨慎。
import os
from pathlib import Path
from pathvalidate import sanitize_filename
PATH = ["/tank/stage/various/dsd",
"/tank/stage/various/flac",
"/tank/stage/classic/dsd",
"/tank/stage/classic/flac",
"/tank/stage/jazz/dsd",
"/tank/stage/jazz/flac",
]
复制代码
上面这段代码里,PATH是你的音乐目录,需要修改一下。我分开是因为其他脚本也用了这个PATH,写一个总目录也可以。
作者:
中关村东路
时间:
2023-2-12 21:34
本帖最后由 中关村东路 于 2023-2-12 21:40 编辑
错误删掉..
复制代码
作者:
中关村东路
时间:
2023-2-12 21:36
本帖最后由 中关村东路 于 2023-2-12 21:40 编辑
def rename(name):
new_name = "" + sanitize_filename(name)
if new_name.startswith(" "):
new_name = new_name[1:]
if new_name.endswith(".fla"):
new_name = new_name.replace(".fla", ".flac")
if new_name.endswith(".FLA"):
new_name = new_name.replace(".FLA", ".flac")
new_name = new_name.replace("A$AP", "ASAP")
new_name = new_name.replace("$ale", "Sale")
new_name = new_name.replace("$ign", "Sign")
new_name = new_name.replace("$Ale", "Sale")
new_name = new_name.replace('《', '[')
new_name = new_name.replace('》', ']')
new_name = new_name.replace('【', '[')
new_name = new_name.replace('】', ']')
new_name = new_name.replace('(', '(')
new_name = new_name.replace(')', ')')
new_name = new_name.replace('/', '_')
new_name = new_name.replace('<', '_')
new_name = new_name.replace('>', '_')
new_name = new_name.replace(':', '_')
new_name = new_name.replace('"', "'")
new_name = new_name.replace('/', '_')
new_name = new_name.replace('\\', '_')
new_name = new_name.replace('|', '_')
new_name = new_name.replace('?', '_')
new_name = new_name.replace('*', '_')
new_name = new_name.replace('这里是美刀符号需要自己修改', '_')
new_name = new_name.replace('`', "'")
new_name = new_name.replace('~', '_')
return new_name
复制代码
上面这段代码写的很繁琐很难看,但也是分享的小技巧的核心。没别的办法,一部分是按照Roon的官方FAQ(见【1】)写的,一部分是自己遇到的诡异文件名。截止目前,在utf8 encoding下,这段规则是好的,以后遇到什么新的问题我会在这增加。因为本网站也遇到符号问题。。。。上面有一句“
这里是美刀符号需要自己修改
”,请自行修改成美元符号。。囧
【1】https://help.roonlabs.com/portal/en/kb/articles/faq-some-of-my-files-aren-t-showing-up-in-roon#Special_Characters
作者:
中关村东路
时间:
2023-2-12 21:39
def process(dirs):
if len(dirs) == 0:
return
subs = []
for dir in dirs:
for child in dir.glob('*'):
new_name = rename(child.name)
new_path = Path(dir, new_name)
if new_name != child.name:
print('======', dir)
print('old', child.name)
print('new', new_name)
child.rename(new_path)
if new_path.is_dir():
subs.append(new_path)
process(subs)
for p in PATH:
print('=====rename', p)
process([Path(p)])
复制代码
上面这段就是一个简单的递归。遍历一下所有文件,把需要重命名的用Path.rename函数改一下。
如果上面的技巧对你有所帮助,或者遇到疑问,可以直接回复。
作者:
wahher
时间:
2023-2-12 23:08
高端,看不懂,帮顶
作者:
qazpl963
时间:
2023-2-13 05:31
看了下,这不就是个改名小程序吗。。。
作者:
耳机俱乐部小黑
时间:
2023-2-13 08:39
类似于批处理文件,便利后缀改命吧
作者:
Frank75
时间:
2023-2-13 09:55
软件大拿,不明觉厉!
作者:
中关村东路
时间:
2023-2-13 15:20
耳机俱乐部小黑 发表于 2023-2-13 08:39
类似于批处理文件,便利后缀改命吧
你如果说原理,那确实就是批处理,递归遍历实现的。
这代码的关键是到底 roon 系统有什么文件名需要被批处理掉,批处理成什么才能保证 roon 正常运行。上面代码跑了两年多一直稳定,最近有朋友提到,我就拿出来分享给可能用得到的烧友
作者:
中关村东路
时间:
2023-2-13 15:24
qazpl963 发表于 2023-2-13 05:31
看了下,这不就是个改名小程序吗。。。
您抬举了,开篇第一句就说了只是段脚本,您居然还要看一下才知道。
作者:
xreyer
时间:
2023-2-13 18:28
先收藏
作者:
万远
时间:
2023-2-21 09:56
虽然不知如何使用,但还是感谢你分享!
欢迎光临 耳机网-耳机大家坛 (http://www2.erji.net/)
Powered by Discuz! X3.2