编辑:我做了第一个版本,Eike帮我推进了很多.我现在坚持一个更具体的问题,我将在下面描述.您可以查看历史记录中的原始问题
我正在使用pyparsing来解析用于从数据库请求特定数据的小语言.它具有许多关键字,运算符和数据类型以及布尔逻辑.
我正在尝试改进发出语法错误时发送给用户的错误消息,因为当前的错误消息不是很有用.我设计了一个小例子,类似于我正在用上述语言做的但是要小得多:
#!/usr/bin/env python
from pyparsing import *
def validate_number(s, loc, tokens):
if int(tokens[0]) != 0:
raise ParseFatalException(s, loc, "number musth be 0")
def fail(s, loc, tokens):
raise ParseFatalException(s, loc, "Unknown token %s" % tokens[0])
def fail_value(s, loc, expr, err):
raise ParseFatalException(s, loc, "Wrong value")
number = Word(nums).setParseAction(validate_number).setFailAction(fail_value)
operator = Literal("=")
error = Word(alphas).setParseAction(fail)
rules = MatchFirst([
Literal('x') + operator + number,
])
rules = operatorPrecedence(rules | error , [
(Literal("and"), 2, opAssoc.RIGHT),
])
def try_parse(expression): …Run Code Online (Sandbox Code Playgroud) 我有一堆使用前缀但没有相应命名空间声明的 XML 文件。
像这样的东西:
<tal:block tal:condition="foo">
...
</tal:block>
Run Code Online (Sandbox Code Playgroud)
或者:
<div i18n:domain="my-app">
...
Run Code Online (Sandbox Code Playgroud)
我知道这些前缀来自哪里,我尝试了以下方法,但没有成功:
from lxml import etree as ElementTree
ElementTree.register_namespace("i18n", "http://namespaces.zope.org")
ElementTree.register_namespace("tal", "http://xml.zope.org/namespaces/tal")
with open(path) as fp:
tree = ElementTree.parse(fp)
Run Code Online (Sandbox Code Playgroud)
但 lxml 仍然窒息:
lxml.etree.XMLSyntaxError: Namespace prefix i18n for domain on div is not defined, line 4, column 20
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用ElementTree.XMLParser(recover=True),但无论如何我想保留前缀,而这种方法没有。
任何的想法?
我正在开发使用Python和GTK另一个图像浏览器和查看器是目前非常简单:它由一个GtkWindow与GtkTreeView左侧显示我的图片列表中,并且GtkImage在右侧,显示实际图像.到现在为止还挺好.
现在,我想全屏显示,只显示黑色背景等图像.
我可以看到几种方法:
GtkImage,而不是,但我失去之前(信号为例)的窗口上我的设置,而我躲在肚里全屏窗口,这是一个有点所有的东西奇怪的;GtkImage里面,而不是(做在退出全屏相反);GtkHBox作为我的窗口的直接孩子,有两个孩子,并且在"正常"模式下仅显示第一个,而在全屏上仅显示第二个.这一切看起来都有点hacky,所以我想知道处理这种情况的推荐方法是什么.谢谢!
是否可以创建通过"虚拟"串行端口发送数据的"虚拟"串行设备?我需要开发一些代码来与Arduino进行交互,但是不需要它.可以用socat或写入dev/ttyXXX文件的一些代码来完成吗?
编辑:我正在运行Arch Linux
假设我有一个包含“名称”和“数量”列的表,我想获取出现次数最多的前 X 个产品,以及另一行,它是所有其他产品的总和。
我们可以以此示例 SQL 脚本为例:
CREATE TEMPORARY TABLE product
(
name TEXT,
quantity INT
);
INSERT INTO product (name, quantity)
VALUES
('carrot', 5),
('tomato', 1),
('potato', 3),
('grape', 8),
('salad', 10);
Run Code Online (Sandbox Code Playgroud)
从这个样本集中,我想检索这种结果:
name quantity
----------------
salad 10
grape 8
others 9
Run Code Online (Sandbox Code Playgroud)
我目前正在使用以下解决方案,但我想知道是否有更漂亮和/或更高效的方法:
WITH top AS (
SELECT name,
quantity
FROM product
ORDER BY quantity DESC
LIMIT 2),
without AS (
SELECT 'others' AS other,
sum(product.quantity) AS quantity
FROM product
WHERE product.name NOT IN (SELECT name FROM top)
GROUP BY …Run Code Online (Sandbox Code Playgroud) 我希望能够授权或拒绝对Windows XP及更高版本上特定目录的写访问。
我尝试了以下方法,但它们都不起作用:
os.chmod():只能指定文件只读属性,请参见Python的文档win32api.SetFileAttribute() FILE_ATTRIBUTE_READONLY:只读文件。[...]在目录中不使用此属性,请参见MSDN的SetFileAttribute看来我唯一的选择就是访问和更新“ 安全信息 ”,我已经尝试了好几个小时才能完成一些工作,但收效甚微(我对Win32 API确实不熟悉)。
关于如何做到这一点的任何想法?
文件内容如下:
##this is the comment
but this is not comment '####', LOL # this is a normal comment
Run Code Online (Sandbox Code Playgroud)
我只是想过滤所有评论并获得过滤后的内容,但我不知道如何避免过滤不是评论的英镑符号.
fileLines = [line.strip() for line in file if '#' != line[0] ]
Run Code Online (Sandbox Code Playgroud)
这段代码只是可以过滤注释符号,这是一行的第一个字符.
我想要的结果就像下面一行:
but this is not comment '####', LOL
Run Code Online (Sandbox Code Playgroud)