我知道使用Boto 2可以打开一个S3对象作为字符串:
get_contents_as_string() http://boto.readthedocs.org/en/latest/ref/file.html?highlight=contents%20string#boto.file.key.Key.get_contents_as_string
boto3中是否有等效功能?
我试图使用jQuery.when
两个ajax
请求,然后在两个请求完成后调用一些函数.这是我的代码:
var count = 0;
var dfr;
var showData = function(data) {
dfr.resolve();
alert(count);
// Do something with my data data received
};
var method1 = function() {
dfr = $.Deferred();
return $.ajax('localhost/MyDataService/DataMethod_ReturnsData', {
dataType: "jsonp",
jsonp: "$callback",
success: showData
});
};
var method2 = function() {
return $.ajax('localhost/MyDataService/DataMethod_ReturnsCount', {
dataType: "jsonp",
jsonp: "$callback",
success: function(data) {
count = data.d.__count;
}
});
};
$.when(method1(), method2())
.then(showData());
Run Code Online (Sandbox Code Playgroud)
但是这没有按预期工作.Ajax调用method1
将返回要使用的数据,showData()
并且Ajax调用method2
将返回计数,该计数将分配给var count并稍后用于showData()
. …
如何编写一个装饰器,将当前工作目录恢复到调用修饰函数之前的状态?换句话说,如果我在执行a的函数上使用装饰器,则在调用函数os.chdir()
后不会更改cwd.
我用C#创建了一个dll.如何在IronPython中使用dll.我试图使用clr.AddReference("yxz.dll")添加dll.但它失败了.我已经尝试将dll放在IronPython脚本的执行目录中.在尝试引用dll时仍然无法声明"找不到名称xyz".
我想用一个接受任一参数std::greater<int>
或std::less<int>
作为参数的参数来创建一个函数.不过,我仍然坚持参数的语法.
这是我尝试的格式:
myFunction(int a, int b, bool *comp(int, int)) { … }
…
std::greater<int> bigger;
myFunction(2, 3, bigger);
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我怀疑第三个参数完全错误.它到底应该是什么?
无法转换
std::greater<int>
为bool* (*)(int, int)
使用Python/MyPy类型提示,可以使用.pyi存根将注释保存在单独的文件中以实现.我正在使用此功能来提供SQLAlchemy的ORM(更具体地说,flask_sqlalchemy插件)的基本提示.
模型定义如下:
class MyModel(db.Model):
id = db.Column()
...
...
Run Code Online (Sandbox Code Playgroud)
其中db.Model直接包含在SQLAlchemy中.例如,可以通过以下方式查询它们:
MyModel.query.filter({options: options}).one_or_none()
Run Code Online (Sandbox Code Playgroud)
其中filter()返回另一个Query,one_or_none()返回MyModel的实例(显然是None).
下面的.pyi文件成功提示上面的构造,虽然它不完整 - 没有办法提示返回类型one_or_none().
class _SQLAlchemy(sqlalchemy.orm.session.Session):
class Model:
query = ... # type: _Query
class _Query(sqlalchemy.orm.query.Query):
def filter(self, *args) -> query.Query: ...
def one_or_none(self) -> Any: ...
db = ... # type: _SQLAlchemy
Run Code Online (Sandbox Code Playgroud)
如何完全和一般地暗示上述内容,并提示one_or_none()的返回类型?我的第一次尝试是使用泛型,但看起来我无法访问所讨论的子类型(在给定的示例中,MyModel).为了说明一种非工作方法:
from typing import Generic, TypeVar
_T = TypeVar('_T')
class _SQLAlchemy(sqlalchemy.orm.session.Session):
class Model:
def __init__(self, *args, **kwargs):
self.query = ... # type: _Query[self.__class__]
class _Query(Generic[_T], sqlalchemy.orm.query.Query):
def filter(self, *args) -> _Query[_T]: ...
def …
Run Code Online (Sandbox Code Playgroud) 我有一个Python包,我试图用sphinx-autodoc记录.我的python包有一个__init__.py
文件,它从子模块中导出一个类,使其可以在包级别访问.
from a.b.c.d import _Foo as Foo
__all__ = ["Foo"]
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我的(html)文档如下:
abc包
子模块
abcd模块
[在abcd模块中剪切不相关公共类的文档]
模块内容
c模块.
abc Foo
_Foo的别名
_Foo
因为它是abcd子模块中的私有类,所以(正确地)没有文档,因此不是非常有用.
我可以在my中添加以下内容,以conf.py
确保记录模块中的私有类定义.
def skip(app, what, name, obj, skip, options):
if name == "_Foo":
return False
return skip
Run Code Online (Sandbox Code Playgroud)
其他替代方案,但不是我尝试过的好东西:
a.b.c.d._Foo
为a.b.c.d.Foo
(然后更新导入到from a.b.c.d import Foo
) - 但后来我将类记录两次,一次在abcd模块标题下,再一次在Module内容标题下.a.b.c.d.Foo
到a.b.c.d.MyFoo
,然后导入(from a.b.c.d import MyFoo as Foo
)导致MyFoo
被记录,并且Foo
被列为一个别名MyFoo
. …当使用df.mean()时,我得到一个结果,其中给出了每列的平均值.现在让我们说我想要第一列的平均值,以及第二列的总和.有没有办法做到这一点?我不想拆卸和重新组装数据帧.
我最初的想法是按照pandas.groupby.agg()的方式做一些事情:
df = pd.DataFrame(np.random.random((10,2)), columns=['A','B'])
df.apply({'A':np.mean, 'B':np.sum}, axis=0)
Traceback (most recent call last):
File "<ipython-input-81-265d3e797682>", line 1, in <module>
df.apply({'A':np.mean, 'B':np.sum}, axis=0)
File "C:\Users\Patrick\Anaconda\lib\site-packages\pandas\core\frame.py", line 3471, in apply
return self._apply_standard(f, axis, reduce=reduce)
File "C:\Users\Patrick\Anaconda\lib\site-packages\pandas\core\frame.py", line 3560, in _apply_standard
results[i] = func(v)
TypeError: ("'dict' object is not callable", u'occurred at index A')
Run Code Online (Sandbox Code Playgroud)
但显然这不起作用.看起来传递一个字典会是一种直观的方式,但还有另一种方式(再次没有拆解和重新组装DataFrame)吗?
假设我有以下两个数组:
>>> a = np.random.normal(size=(5,))
>>> a
array([ 1.42185826, 1.85726088, -0.18968258, 0.55150255, -1.04356681])
>>> b = np.random.normal(size=(10,10))
>>> b
array([[ 0.64207828, -1.08930317, 0.22795289, 0.13990505, -0.9936441 ,
1.07150754, 0.1701072 , 0.83970818, -0.63938211, -0.76914925],
[ 0.07776129, -0.37606964, -0.54082077, 0.33910246, 0.79950839,
0.33353221, 0.00967273, 0.62224009, -0.2007335 , -0.3458876 ],
[ 2.08751603, -0.52128218, 1.54390634, 0.96715102, 0.799938 ,
0.03702108, 0.36095493, -0.13004965, -1.12163463, 0.32031951],
[-2.34856521, 0.11583369, -0.0056261 , 0.80155082, 0.33421475,
-1.23644508, -1.49667424, -1.01799365, -0.58232326, 0.404464 ],
[-0.6289335 , 0.63654201, -1.28064055, -1.01977467, 0.86871352,
0.84909353, 0.33036771, 0.2604609 , -0.21102014, …
Run Code Online (Sandbox Code Playgroud) 我在创建初始迁移时遇到问题,该迁移会自动拥有我在models.py中使用共享Base(declarative_base)定义的表.
当我输入命令时:
alembic revision --autogenerate
Run Code Online (Sandbox Code Playgroud)
alembic创建一个空文件.
我的配置或方法有什么问题?
project.base.py:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
Run Code Online (Sandbox Code Playgroud)
env.py:
import sys
import os
sys.path.append(os.path.abspath(os.getcwd()))
from alembic import context
from sqlalchemy import engine_from_config, pool
from logging.config import fileConfig
from project.base import Base
target_metadata = Base.metadata
def run_migrations_online():
"""Run migrations in 'online' mode.
In this scenario we need to create an Engine
and associate a connection with the context.
"""
engine = engine_from_config(
config.get_section(config.config_ini_section),
prefix='sqlalchemy.',
poolclass=pool.NullPool)
connection = engine.connect()
context.configure(
connection=connection,
target_metadata=target_metadata
)
# target_metadata.reflect(engine, …
Run Code Online (Sandbox Code Playgroud)