小编Mar*_*nes的帖子

TypeError:无法深入复制此模式对象

试图在我的"变量"类中理解这个错误.

我希望在我的"变量"类中存储一个sre.SRE_Pattern.我刚刚开始复制Variable类,并注意到它导致我的所有Variable类实例都发生了变化.我现在明白我需要对这个类进行深度复制,但现在我遇到了"TypeError:无法深度复制这个模式对象".当然,我可以将模式存储为文本字符串,但我的其余代码已经预期编译模式!使用模式对象复制Variable类的最佳方法是什么?

import re
from copy import deepcopy

class VariableWithRE(object):
    "general variable class"
    def __init__(self,name,regexTarget,type):
        self.name = name
        self.regexTarget = re.compile(regexTarget, re.U|re.M) 
        self.type = type 

class VariableWithoutRE(object):
    "general variable class"
    def __init__(self,name,regexTarget,type):
        self.name = name
        self.regexTarget = regexTarget
        self.type = type 

if __name__ == "__main__":

    myVariable = VariableWithoutRE("myName","myRegexSearch","myType")
    myVariableCopy = deepcopy(myVariable)

    myVariable = VariableWithRE("myName","myRegexSearch","myType")
    myVariableCopy = deepcopy(myVariable)
Run Code Online (Sandbox Code Playgroud)

python regex deep-copy

15
推荐指数
3
解决办法
8175
查看次数

使用布尔索引就地修改numpy数组部分

给定2D numpy数组,即;

import numpy as np

data = np.array([
     [11,12,13],
     [21,22,23],
     [31,32,33],
     [41,42,43],         
     ])
Run Code Online (Sandbox Code Playgroud)

我需要根据所需行和列的两个屏蔽向量就地修改子数组;

rows = np.array([False, False, True, True], dtype=bool)
cols = np.array([True, True, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

这样即;

print data

 #[[11,12,13],
 # [21,22,23],
 # [0,0,33],
 # [0,0,43]]      
Run Code Online (Sandbox Code Playgroud)

python numpy

9
推荐指数
1
解决办法
2397
查看次数

使用动态表生成完全刷新 SQLAlchemy

我需要在 for 循环中的不同位置创建许多类似的数据库。在循环开始时,我将引擎创建到path_sql_db磁盘上的新引擎。

    engine = sa.create_engine("sqlite:///{}".format(path_sql_db), echo=0, listeners=[util_sa.ForeignKeysListener()])
    Session = sa.orm.sessionmaker(bind=engine)
    session = Session()
Run Code Online (Sandbox Code Playgroud)

然后我有几个模块中的表从 DB_Base 继承,它是在外部模块中定义的;

from sqlalchemy.ext.declarative import declarative_base
DB_Base = declarative_base()
Run Code Online (Sandbox Code Playgroud)

问题是在 for 循环的下一次迭代中,我无法创建我的表,因为它们仍然存在于某处?

InvalidRequestError: Table 'vector_var01' is already defined for this MetaData instance.  
Specify 'extend_existing=True' to redefine options and columns on an existing Table object.
Run Code Online (Sandbox Code Playgroud)

我试过从引擎 MetaData.drop_all() ;

meta = sa.MetaData(bind = engine)
meta.reflect()
meta.drop_all()
session.close()
Run Code Online (Sandbox Code Playgroud)

也来自基地;

DB_Base.metadata.bind = engine
DB_Base.metadata.reflect()
DB_Base.metadata.drop_all()
Run Code Online (Sandbox Code Playgroud)

没有成功,我仍然只是在这里的黑暗中徘徊。

错误指的是哪个 MetaData 实例?如何完全重置数据库代码的状态?

编辑

好的,我找到了问题所在。我正在尝试动态生成 ORM 表。我正在研究优化程序并将设计空间变量存储在他们自己的表中,每个可能的变量值一行。

导致错误的最小示例;

from sqlalchemy import …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

6
推荐指数
1
解决办法
5361
查看次数

使用布尔索引复制或查看numpy子数组

给定2D numpy数组,即;

import numpy as np

data = np.array([
     [11,12,13],
     [21,22,23],
     [31,32,33],
     [41,42,43],         
     ])
Run Code Online (Sandbox Code Playgroud)

我需要创建一个新的子数组或根据所需行和列的两个屏蔽向量修改所选元素;

rows = [False, False, True, True]
cols = [True, True, False]
Run Code Online (Sandbox Code Playgroud)

这样

print subArray

# [[31 32]
#  [41 42]]
Run Code Online (Sandbox Code Playgroud)

python numpy

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

Sqlalchemy核心,从元组而不是dict插入多行

我有2D元组中的数据(或者说来自Numpy表),需要将其插入到SQL表中.使用Sqlalchemy Core和SQLite,如何有效地将这些数据插入到我的表中?

来自@eclaird的ie;

engine = sa.create_engine('sqlite://', echo=True)
metadata = sa.MetaData()

widgets_table = sa.Table('widgets', metadata,
    sa.Column('id', sa.Integer, primary_key=True),
    sa.Column('bar', sa.String(50)),
    sa.Column('biz', sa.Boolean),
    sa.Column('baz', sa.Integer),
    )
metadata.create_all(engine)

# Assuming this is the data where None holds place for primary key
my_data = [
    (None, "Test", True, 3),
    (None, "Test", True, 3),
    ]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我正处于文档的这一点 ; 所以我有;

engine.execute(widgets_table.insert().values((None, "Test", True, 3)))
Run Code Online (Sandbox Code Playgroud)

哪个有效.但我想一次插入许多行,如

engine.execute(widgets_table.insert().values(((None, "Test", True, 3), (None, "Test", True, 3))))
Run Code Online (Sandbox Code Playgroud)

但那么错误;

具有当前数据库版本设置的'sqlite'方言不支持就地多行插入.

也试过;

insert = widgets_table.insert()

engine.execute(insert, [
                    (None, "Test", True, 3), 
                    (None, …
Run Code Online (Sandbox Code Playgroud)

python sqlite sqlalchemy

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

用fig.show()内联一个IPython Notebook图形?

我正在调用IPython Notebook的内联模式;

%pylab inline
Run Code Online (Sandbox Code Playgroud)

以下代码立即在单元格中绘制一个数字;

fig = plt.figure()
axes = fig.add_axes([0, 0, 1, 1])
Run Code Online (Sandbox Code Playgroud)

但是我想在一个单元格中创建绘图/轴等,稍后使用也可以绘制;

fig.show()
Run Code Online (Sandbox Code Playgroud)

如何获得对内联模式的更多控制?如果我不使用%pylab inline,它会在一个我不想要的单独窗口中创建绘图(并且它通常会冻结窗口).

版本;

Numpy: 1.7.0
Matplotlib: 1.2.1rc1
Python: 2.7.2 (default, Jun 24 2011, 12:22:14) [MSC v.1500 64 bit (AMD64)]
Pandas: 0.10.1
PyLab: 1.7.0
Run Code Online (Sandbox Code Playgroud)

matplotlib ipython python-2.7 ipython-notebook

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

如何使用SQLalchemy Core动态连接多个表?

我有一个父表,其中包含几个子表的主键.子表的数量在运行时可以是任意的.使用SQLalchemy核心,如何将多个子表连接到此父级?

假设我有类sqlalchemy.schema.Table的表,有效FK约束; 我该如何构造这个查询?

我试过ie;

childJoins= [sa.join(parentTable,childTables[0]),sa.join(parentTable,childTables[1])]
# childTables is a list() of Table objects who are guaranteed linked by pk 

qry = sa.select(["*"],from_obj=childJoins)
Run Code Online (Sandbox Code Playgroud)

这使;

SELECT * 
FROM 
parentTable JOIN child1 ON child1.P_id = parentTable.C1_Id, 
parentTable JOIN child2  ON child2.P__id = parentTable.C2_Id
Run Code Online (Sandbox Code Playgroud)

所以parentTable被列出两次......

尝试使用join()等更多的变体来看看文档,但我仍然无法得到我想要的东西;

SELECT *
FROM parentTable
JOIN child1 ON parentTable.C1_Id=child1.P_Id
JOIN child2 ON parentTable.C2_Id=child2.P_Id 
...
JOIN childN ON parentTable.CN_Id=childN.P_Id
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

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

从外部Revit访问Revit API

我使用了RevitPythonShell和Dynamo,但想使用现有的Python IDE(Eclipse),在其中进行日志记录,调试,GitHub集成等配置。

我对交易和整个API都很满意,并且花了一些时间阅读有关Revit API和无模式连接的信息,其他人也提出了类似的问题。其中一些已经几岁了。目前是否可以从Revit外部执行的Python与Revit进行交互?

例如,我尝试过;

import clr
clr.AddReference(r'C:\Program Files\Autodesk\Revit 2016\RevitAPI')
import Autodesk.Revit.DB as rvt_db
print(dir(rvt_db))
Run Code Online (Sandbox Code Playgroud)

但这似乎没有揭示任何有用的东西。

python revit-api revitpythonshell pyrevit

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

更改python fileConfig记录器的级别

我有一个从文件配置的记录器,并希望更改我的日志记录级别,而无需更改.conf文件,而是使用内联代码;

import logging.config

logging.config.fileConfig('..\\LoggingConfig\\loggingfile.conf')

logging.StreamHandler.setLevel(logging.info)

logging.debug("Debug")
logging.info("Info")
Run Code Online (Sandbox Code Playgroud)

这应该只将"信息"日志行打印到屏幕上.我不知道在哪个对象上调用setLevel()!logging.StreamHandler.setLevel(logging.info)在30分钟搜索后只是在黑暗中刺伤......

loggingfile.conf文件;

[loggers]
keys=root

[logger_root]
handlers=screen
level=NOTSET

[formatter_modfunc]
format=%(module)-20s  %(funcName)-25s %(levelno)-3s: %(message)s

[handlers]
keys=screen

[handler_screen]
class=StreamHandler
formatter=modfunc
level=DEBUG
args=(sys.stdout,)
qualname=screen
Run Code Online (Sandbox Code Playgroud)

python logging

3
推荐指数
2
解决办法
5894
查看次数