我用Python3编写了一个小实用程序,帮助我将我的音乐收藏从NAS复制到移动设备上。它的有用之处在于它将自动地将flac文件转换为ogg-vorbis (以节省空间),并根据它们的音频标记(即艺术家、专辑、日期等)排除一些文件。
我对排斥特性的局限性不满意,我想改进它,但我遇到了一个心理障碍,我正在寻找如何继续前进的建议。
我希望用户编写一个排除文件,该文件如下所示:
exclude {
artist is "U2"
artist is "Uriah Heep" {
album is "Spellbinder"
album is "Innocent Victim"
}
}这将转化为:
exclude if
(artist = "U2") OR
(artist = "Uriah Heep" AND (album = "Spellbinder" OR album = "Innocent Victim"))将有更多的条件,如子字符串匹配和日期范围。
我一直在检查铺层,但我很难理解如何解析这种类型的嵌套结构,以及如何表示产生的条件,以便在复制操作期间应用排除筛选器时,可以在代码中执行它。
发布于 2015-11-18 00:17:45
语言不可知论的答案(我不知道python):
因为您的结构是一棵树,所以您需要将其存储为树。你需要知道你的树是只有两个或两个以上,这可能会影响处理它的方式(递归或蛮力)。
如果你不需要优化速度,你可以从一个天真的算法开始。
将您的树与处理算法匹配。
从最高层开始。
为每个分支循环1/循环,直到找到匹配(排除)为止,如果没有匹配,则返回调用方而不排除。
2/如果节点在下一级别没有分支,则返回给调用方,并进行排除。
[3]如果节点在下一层有分支或叶子,那么从一个层次开始,从操作1开始。
HTH
https://softwareengineering.stackexchange.com/questions/302382
复制相似问题