小编MFB*_*MFB的帖子

将嵌套的Python对象转换为字典的最经济的方法是什么?

我有一些SQLAlchemy对象,其中包含更多SQLAlchemy对象的列表,依此类推(大约5个级别).我希望将所有对象转换为字典.

我可以使用__dict__属性将对象转换为字典,没问题.但是,我也无法找到转换所有嵌套对象的最佳方法,而无需明确地执行每个级别.

到目前为止,这是我能想到的最好的,但它没有正确递归.它基本上在一次通过后中断,所以我的逻辑显然有问题.你能看出它有什么问题吗?

我希望这样做:

all_dict = myDict(obj.__dict__)

def myDict(d):
    for k,v in d.items():
        if isinstance(v,list):
            d[k] = [myDict(i.__dict__) for i in v]
        else:
            d[k] = v
    return d
Run Code Online (Sandbox Code Playgroud)

python dictionary sqlalchemy

5
推荐指数
2
解决办法
3267
查看次数

如何使用Python将字符串转换为类子属性

我知道我可以使用这样的字符串获取Class的属性:

object.attribute = 'foo'
x = 'attribute'
getattr(object, x)
>>> 'foo'
Run Code Online (Sandbox Code Playgroud)

有没有办法用字符串"深入"对象的属性?换句话说,如果我的对象包含另一个对象,我如何用字符串获取子对象的属性?例如:

object.object.attribute
Run Code Online (Sandbox Code Playgroud)

python attributes class

5
推荐指数
2
解决办法
2323
查看次数

金字塔遍历正在努力

我试图通过这个非常简单的例子来了解金字塔遍历.我还没有完全掌握的是Article从数据库中"注入"一个对象的位置.

实际上,/Article正确地找到并呈现,article_view但这是相当无用的.如何/何时/何地使用URL的下一部分从db查询特定文章?例如./Article/5048230b2485d614ecec341d.

任何线索都会很棒!

init .py

from pyramid.config import Configurator
from pyramid.events import subscriber
from pyramid.events import NewRequest
import pymongo

from otk.resources import Root

def main(global_config, **settings):
    """ This function returns a WSGI application.
    """
    config = Configurator(settings=settings, root_factory=Root)
    config.add_static_view('static', 'otk:static')
    # MongoDB
    def add_mongo_db(event):
        settings = event.request.registry.settings
        url = settings['mongodb.url']
        db_name = settings['mongodb.db_name']
        db = settings['mongodb_conn'][db_name]
        event.request.db = db
    db_uri = settings['mongodb.url']
    MongoDB = pymongo.Connection
    if 'pyramid_debugtoolbar' in set(settings.values()):
        class MongoDB(pymongo.Connection):
            def …
Run Code Online (Sandbox Code Playgroud)

python traversal pyramid

5
推荐指数
1
解决办法
1647
查看次数

mongodb.lock许可否认

在Arch Linux 64bit上使用MongoDb.全新安装.以root身份尝试:

/etc/rc.d/mongodb start
Run Code Online (Sandbox Code Playgroud)

日志说:

***** SERVER RESTARTED *****


Thu Mar 15 12:00:18 BackgroundJob starting: DataFileSync
Thu Mar 15 12:00:18 versionCmpTest passed
Thu Mar 15 12:00:18 versionArrayTest passed
Thu Mar 15 12:00:18 shardObjTest passed
Thu Mar 15 12:00:18 shardKeyTest passed
Thu Mar 15 12:00:18 isInRangeTest passed
Thu Mar 15 12:00:18 [initandlisten] MongoDB starting : pid=580 port=27017 dbpath=/data/db 64-bit host=(none)
Thu Mar 15 12:00:18 [initandlisten] db version v2.0.3, pdfile version 4.5
Thu Mar 15 12:00:18 [initandlisten] git version: nogitversion
Thu …
Run Code Online (Sandbox Code Playgroud)

mongodb archlinux

4
推荐指数
1
解决办法
6004
查看次数

实例化时使用datetime.now()的Python类

我想要一个Class属性,它设置datetime.now()何时实例化一个新的类实例.使用此代码,MyThing.created似乎始终MyThing是导入时,而不是mt实例化时.

from datetime import datetime

class MyThing:
    __init__(self, created=datetime.now()):
        self.created = created

MyThing.created
datetime.datetime(2012, 7, 5, 10, 54, 24, 865791)

mt = MyThing()
mt.created
datetime.datetime(2012, 7, 5, 10, 54, 24, 865791)
Run Code Online (Sandbox Code Playgroud)

我如何能做到这一点,这样createdmt被实例化,而不是MyThing

python datetime class

4
推荐指数
1
解决办法
766
查看次数

在Pyramid应用程序中注册自定义Jinja2过滤器

我已经尝试了几种方法。根据文档,我已经在应用程序的ini中完成了此操作:

[app:myapp]
#...
jinja2.filters =
    islist = myapp.machines.islist
Run Code Online (Sandbox Code Playgroud)

我的功能很简单:

def islist(item):
    return isinstance(item, list)
Run Code Online (Sandbox Code Playgroud)

我可以告诉正在读取ini文件中的过滤器设置行,因为如果我islist弄错了函数的虚线路径,则该应用程序将引发错误。

但是,当我尝试islist在模板中使用该函数时,该模板找不到该函数。

{% if islist([]) %}a list{% else %}not a list{% endif %}
Run Code Online (Sandbox Code Playgroud)

结果:

UndefinedError: 'islist' is undefined
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么??任何帮助都是极好的。

python jinja2 pyramid

4
推荐指数
1
解决办法
812
查看次数

Python requests_toolbelt MultipartEncoder 文件名

使用 requests_toolbelt 以多部分形式上传大文件,我构建了一个方法,可以成功上传文件,但是我无法访问发布的文件名。如何访问服务器上的文件名?

# client-side
file = open('/Volumes/Extra/test/my_video.mpg', 'rb')
payload = MultipartEncoder({file.name: file})
r = requests.post(url, data=payload, headers={'Content-Type': 'application/octet-stream'})

# server-side
@view_config(route_name='remote.agent_upload', renderer='json')
def remote_agent_upload(request):
    r = request.response
    fs = request.body_file
    f = open('/Volumes/Extra/tests2/bar.mpg', 'wb')  # wish to use filename here
    f.write(fs.read())
    fs.close()
    f.close()
    return r
Run Code Online (Sandbox Code Playgroud)

python python-requests

4
推荐指数
1
解决办法
2万
查看次数

Python 鼻子测试示例

我刚刚开始进入测试开发,并且很难理解要测试什么。那里有很多 foobar 示例,但我很难知道如何测试我的项目单元。例如,采用以下函数,它简单地将文本文件的行作为列表返回:

def getLines(filename):
    try:
        f = open(filename,'rb')
        lines = f.readlines()
        f.close()
    except:
        break
    return lines
Run Code Online (Sandbox Code Playgroud)

如果这是您的功能,您会测试什么?您不需要编写代码,如果您愿意,只需概括地告诉我即可。

谢谢

python unit-testing nose

3
推荐指数
1
解决办法
2113
查看次数

更正嵌套列表或集合理解的语法

想象一下这个对象:

my_obj = {
    'Episodes' : [
        {'Tags' : ['one','two','three']},
        {'Tags' : ['three','four','five']}
            ]
        }
Run Code Online (Sandbox Code Playgroud)

我想创建一组标签:

tags = set(tag for tag in e['Tags'] for e in my_obj['Episodes'])
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用,因为e没有定义.我该怎么做??

python list-comprehension set

3
推荐指数
1
解决办法
476
查看次数

使用Jinja2构建链接列表

我已经将一个字符串列表传递给了我的Jinja2模板.我想将Jinja2用于join列表,但我想将每个列表项转换为a href.是否有可能或者我是否需要以某种方式将链接传递给模板?

# I use this to join the list items.

{{ my_list|join(', ') }}

# I use this to make links individually

{% for i in my_list %}

    <a href="/edit/{{ i }}">i</a>

{% endfor %}
Run Code Online (Sandbox Code Playgroud)

如何在项目加入之前将项目转换为链接?

任何帮助都是极好的.

python jinja2

3
推荐指数
1
解决办法
7015
查看次数