我正在使用Python中的守信音频对象进行大量的工作(如echonest返回的那样),不必每次都重新创建它们,而是可以保存它们。
这段代码会重新加载所有代码,通过一个dict引用:
def get_saved(directory = 'audio/', extension = 'en'):
return glob.glob(directory + '*.' + extension)
def file_queue(files):
"""
Get list of files, add them to a queue and return the queue.
"""
q = Queue()
for f in files:
q.put(f)
return q
def lazarus(filename):
"""
Get pickled (*.en) filename (path) and return echonest analysis object
"""
with open(filename) as f:
return pickle.load(f)
def lazarus_queue(q):
container = {}
while not q.empty():
track = q.get()
filename = track.replace('.mp3.analysis.en', '')
filename = filename.replace('audio/', '')
container[filename] = lazarus(track)
return container
def resurrect():
files = get_saved()
q = file_queue(files)
return lazarus_queue(q)它是一个小助手模块的一部分:
>>> import mtu
>>> audio_objs = mtu.resurrect()
>>> audio_objs
{'claudia': <echonest.remix.audio.LocalAudioFile object at 0x10712e910>, 'GlitchBit_BJanoff': <echonest.remix.audio.LocalAudioFile object at 0x10712e690>, 'livingstonleo': <echonest.remix.audio.LocalAudioFile object at 0x10f52e0d0>, 'amandathorpe': <echonest.remix.audio.LocalAudioFile object at 0x10712ef90>, 'cucumbers': <echonest.remix.audio.LocalAudioFile object at 0x10712e990>}(请注意,pickle本身不适用于电子商务LocalAudioFiles,后者有自己的save()方法。
发布于 2015-09-10 09:32:57
这里有一些风格建议,来源于Python的样式指南(PEP0008)。
关键字参数不应该在等于符号的两边都有空格:
def get_saved(directory='audio/', extension='en'):很好,您包含了一个docstring,但是一行docstring应该放在一行上。
"""Get list of files, add them to a queue and return the queue."""还有一个原因,但是为什么不使用os模块的os.path.join函数而不是在创建路径时进行连接呢?它检查您所使用的操作系统,以确保它使用正确的语法。这通常是比串联更安全的方法。
return glob.glob(os.path.join(directory, '*.' + extension))https://codereview.stackexchange.com/questions/79368
复制相似问题