我必须将算法从Excel工作表移植到python代码,但我必须从Excel文件中对算法进行反向工程.
Excel工作表非常复杂,它包含许多单元格,其中有公式引用其他单元格(也可以包含公式或常量).
我的想法是用python脚本分析构建一个单元格之间依赖关系的表格,即:
A1取决于B4,C5,E7公式:"= sqrt(B4)+ C5*E7"
A2取决于B5,C6公式:"= sin(B5)*C6"
......
所述xlrd蟒模块允许读取XLS工作簿但此刻我可以访问到的值的单元,而不是的公式.
例如,使用以下代码,我可以简单地得到一个单元格的值:
import xlrd
#open the .xls file
xlsname="test.xls"
book = xlrd.open_workbook(xlsname)
#build a dictionary of the names->sheets of the book
sd={}
for s in book.sheets():
sd[s.name]=s
#obtain Sheet "Foglio 1" from sheet names dictionary
sheet=sd["Foglio 1"]
#print value of the cell J141
print sheet.cell(142,9)
Run Code Online (Sandbox Code Playgroud)
无论如何,似乎没有办法从.cell(...)方法返回的Cell对象中获取formul .在文档中,他们说可以获得公式的字符串版本(英文版,因为没有关于存储在Excel文件中的函数名转换的信息).他们在Name和Operand类中谈论公式(表达式),无论如何我无法理解如何通过必须包含它们的Cell类实例来获取这些类的实例.
你能建议一个从单元格中获取公式文本的代码片段吗?
有没有办法从python脚本创建一个独立的.exe.使用py2exe生成的可执行文件只能使用pythonXX.dll运行.我想获得一个完全独立的.exe,它不需要安装python运行时库.它看起来像一个链接问题,但使用静态库而不是动态库,并且应用条带以删除未使用的符号也很有用.
任何的想法 ?
谢谢.
亚历山德罗
如何使用空格作为分隔符正确分割包含具有特殊字符的句子的字符串?使用正则表达式分割方法我无法获得所需的结果.
示例代码:
# -*- coding: utf-8 -*-
import re
s="La felicità è tutto" # "The happiness is everything" in italian
l=re.compile("(\W)").split(s)
print " s> "+s
print " wordlist> "+str(l)
for i in l:
print " word> "+i
Run Code Online (Sandbox Code Playgroud)
输出是:
s> La felicità è tutto
wordlist> ['La', ' ', 'felicit', '\xc3', '', '\xa0', '', ' ', '', '\xc3', '', '\xa8', '', ' ', 'tutto']
word> La
word>
word> felicit
word> Ã
word>
word> ?
word>
word>
word>
word> Ã
word>
word> ? …Run Code Online (Sandbox Code Playgroud) 我有多个(假设是2,A和B)webservices,我需要生成一个客户端来使用它们.在Netbeans中,我使用向导"new Web Service Client"传递两个wsdl,查看输出Netbeans只需为每个wsmport调用wsimport.
wsimport http:/mydomain/wsA.svc?wsdl
wsimport http:/mydomain/wsB.svc?wsdl
Run Code Online (Sandbox Code Playgroud)
A和B都生成一个相同的包com.mydomain.myapp(我猜它们是在同一个命名空间中定义的),所以我得到了在同一个包中合并的A和B的存根类集.
但是,wsimport还为每个Web服务创建一个ObjectFactory,因此如果我在AI获取与B定义相关的ObjectFactory之后生成B的存根(因为第一个,A被覆盖).相反,如果我切换订单,A的ObjectFactory仍然存在.
问题是我需要两个ObjectFactories才能为Web服务A和B的类型创建JAXBElements包装clas实例.
有没有办法在Java包中映射A的名称空间,在另一个中映射B以获取
com.mydomain.myapp.a
com.mydomain.myapp.b
Run Code Online (Sandbox Code Playgroud)
所以保留两个ObjectFactories?
简单的重构没有帮助,因为在内部调用了getClass(),一旦一个包被重构,它就不再起作用了.
我有一个基于express,express-session和ws的应用程序(用于websocket支持).
我已使用此代码启用会话中间件:
app.use(session({secret: 'mysecret',resave: true,saveUninitialized: true,cookie: {}}));
Run Code Online (Sandbox Code Playgroud)
我可以在get处理程序中读取和保存会话变量:
app.get('/', function (req, res) {
res.send('Hello World!');
console.log(req.session.test);
req.session.test="OK";
req.session.save();
});
Run Code Online (Sandbox Code Playgroud)
(第一次打印"未定义",第二次按预期打印"OK")
现在我有一个websocket服务器,也是在同一个应用程序中由express处理,我想在req.session内部ws.on("connection",...)和内部获取对象ws.on("message",...).
问题是没有对原始req对象的引用,只是引用了一个upgradeReq是websocket的连接处理程序的包装器.检查此upgradeReq我可以找到包含会话cookie值的connect.sidin ws.upgradeReq.headers.cookie.
wss.on('connection', function connection(ws) {
var location = url.parse(ws.upgradeReq.url, true);
console.log(ws.upgradeReq.headers.cookie);
//....
});
Run Code Online (Sandbox Code Playgroud)
在我的想法中可以通过req.session某种方式从中获取原始内容.
我怎么能做到这一点?
我需要获取带有结构字段地址的指针。重要提示:我正在为一组 C 结构构建序列化器,因此我想迭代结构的字段并获取每个结构的地址作为指针。我知道有一种方法使用 fields 对象和它们的 offset 属性,它可以为您提供距结构本身地址的偏移量,但它是一个通用指针。您能否向我展示一种如何迭代结构字段并为每个字段获取具有正确内部类型的 ctypes 指针的方法?
我在XmlSer.dll中有以下类
namespace xmlser
{
public class XmlSer
{
public Type test(string s)
{
return Type.GetType(s);
}
//...other code
}
}
Run Code Online (Sandbox Code Playgroud)
以及MyApp.exe中的以下代码,它将XmlSer.dll作为参考链接
namespace MyApp
{
public class TestClass
{
public int f1 = 1;
public float f2 = 2.34f;
public double f3 = 3.14;
public string f4 = "ciao";
}
class MainClass
{
public static void Main(string[] args)
{
TestClass tc = new TestClass();
XmlSer ser = new XmlSer();
Console.WriteLine(ser.test("MyApp.TestClass")!=null);
}
}
Run Code Online (Sandbox Code Playgroud)
运行MyApp.exe我得到false,这意味着 …
我在https://mycompany.com/mywspath/Documents.svc?wsdl这样的地址有一个 wsdl 似乎 xsd 在 https://mycompany.com/mywspath/Documents.svc?wsdl&xsd=xsd0处可见
给一个
wsimport https://mycompany.com/mywspath/Documents.svc?wsdl
Run Code Online (Sandbox Code Playgroud)
我获得包含与文档和依赖项相关的类的层次结构(com.microsoft,...)
com
-microsoft
--...
-mycompany
--...
org
-datacontract
--schemas
---...
Run Code Online (Sandbox Code Playgroud)
我的意愿是将 com.mycompany.mywspath 中生成的 clasees 重构为 com.mycompany.mywspath.test 或 com.mycompany.mywspathA
这是因为在同一命名空间中还有其他 Web 服务包含其他定义,因此生成的类存储在同一包 com.mycompany.mywspath 中,并且从第一个 wsimport 获取的 ObjectFactory.class 会被以下调用生成的类覆盖。
我的意愿是使用 wsimport 的 -b 选项避免在来自不同 Web 服务的命名空间的不同包上进行这种绑定。
我使用了这样的 XML 绑定文件:
<jxb:bindings
jxb:version="2.1"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc">
<bindings schemaLocation="https://https://mycompany.com/mywspath/Documents.svc?xsd=xsd0"
node="//xsd:schema[@targetNamespace='http://mycompany.com/mywspath']">
<jxb:schemaBindings>
<jxb:package name="com.mycompany.mywspath"/>
</jxb:schemaBindings>
</bindings>
</jxb:bindings>
Run Code Online (Sandbox Code Playgroud)
类起源于同一位置,没有任何修改,并且 com/mycompany/mywspath/test 不是起源的。
如何将这些类移至 com/mycompany/mywspath/test 包?