首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将已被挑选的对象重新加载到从文件名分配给变量名称的dict中。

将已被挑选的对象重新加载到从文件名分配给变量名称的dict中。
EN

Code Review用户
提问于 2015-02-02 17:12:48
回答 1查看 80关注 0票数 1

我正在使用Python中的守信音频对象进行大量的工作(如echonest返回的那样),不必每次都重新创建它们,而是可以保存它们。

这段代码会重新加载所有代码,通过一个dict引用:

代码语言:javascript
复制
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)

它是一个小助手模块的一部分:

代码语言:javascript
复制
>>> 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()方法。

EN

回答 1

Code Review用户

回答已采纳

发布于 2015-09-10 09:32:57

这里有一些风格建议,来源于Python的样式指南(PEP0008)。

关键字参数不应该在等于符号的两边都有空格:

代码语言:javascript
复制
def get_saved(directory='audio/', extension='en'):

很好,您包含了一个docstring,但是一行docstring应该放在一行上。

代码语言:javascript
复制
"""Get list of files, add them to a queue and return the queue."""

还有一个原因,但是为什么不使用os模块的os.path.join函数而不是在创建路径时进行连接呢?它检查您所使用的操作系统,以确保它使用正确的语法。这通常是比串联更安全的方法。

代码语言:javascript
复制
return glob.glob(os.path.join(directory, '*.' + extension))
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/79368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档