gpt4 book ai didi

python - 将 Python 正则表达式转换为 Shell

转载 作者:行者123 更新时间:2023-12-01 00:01:05 25 4
gpt4 key购买 nike

我正在编写一个 Applescript 播放列表生成器。该过程的一部分是读取 iTunes 库 XML 文件以获取用户库中所有流派的列表。这是 python 实现,它按照我的意愿工作:

    #!/usr/bin/env python

# script to get all of the genres from itunes

import re,sys,sets


## Boosted from the internet to handle HTML entities in Genre names
def unescape(text):
def fixup(m):
text = m.group(0)
if text[:2] == "&#":
# character reference
try:
if text[:3] == "&#x":
return unichr(int(text[3:-1], 16))
else:
return unichr(int(text[2:-1]))
except ValueError:
pass
else:
# named entity
try:
text = unichr(htmlentitydefs.name2codepoint[text[1:-1]])
except KeyError:
pass
return text # leave as is
return re.sub("&#?\w+;", fixup, text)


# probably faster to use a regex than to try to walk
# the entire xml document and aggregate the genres
try:
xml_path = "/Users/%s/Music/iTunes/iTunes Music Library.xml" % sys.argv[1]
except:
print '\tUsage: python '+sys.argv[0]+' <your OSX username>'
raise SystemExit

pattern = "<key>Genre</key><string>([^<]+)</string>"

try:
xml = file(xml_path,'r').read()
except:
print '\tUnable to load your iTunes Library XML file'
raise SystemExit

matches = re.findall(pattern,xml)
uniques = map(unescape,list(sets.Set(matches)))
## need to write these out somewhere so the applescript can read them
sys.stdout.write('|'.join(uniques))
raise SystemExit

问题是,我希望 Applescript 是独立的,并且不需要存在此附加文件(我计划将其提供给其他人)。而且,据我所知,Applescript 不提供任何类型的开箱即用的正则表达式功能。我可以循环播放库中的每首轨道以获取所有流派,但这是一个极其漫长的过程,我在构建播放列表时已经做过一次。因此,我正在寻找替代方案。

由于 Applescript 允许我运行 shell 脚本并捕获结果,因此我想我可以使用某种类型的 shell 命令(无论是 grep、perl 还是其他命令)来完成相同的行为。我的 *nix 命令行技能非常生疏,我正在寻找一些指导。

所以,简而言之,我想找到一种方法将上述 python 代码转换为我可以直接从 shell 调用并获得类似结果的代码。谢谢!

最佳答案

为什么使用正则表达式来解析 XML?为什么不使用合适的 XML 库呢? Python 有一些很棒的实用程序,例如 ElementTree,它们使遍历 DOM 变得更加容易,并且它生成漂亮、友好的对象,而不是无类型的字符串。

以下是使用 Applescript 解析 XML 的一些方法:

Applescript XML Parser (显然从 Tiger 开始就可用)

XML Tools you can also use with Applescript

请记住,就像 Applescript 可以连接到 iTunes 一样,它也可以连接到其他已安装的实用程序,例如这些。

最后,为什么不直接用 Python 编写整个内容,因为它有更好的调试开发工具并且运行速度更快。如果您运行的是 Leopard,则已预安装了 Python 2.5.1。

关于python - 将 Python 正则表达式转换为 Shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/514767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com