在pyparsing中我遇到了这个错误
from pyparsing import Word,alphas,nums,Or,Regex,StringEnd
ws = Regex('\s*')
dot = "."
w = Word(alphas) + (ws | dot) + StringEnd()
w.leaveWhitespace()
w.parseString('AMIT.')
Run Code Online (Sandbox Code Playgroud)
返回以下错误:
ParseException: Expected end of text (at char 4), (line:1, col:5)
Run Code Online (Sandbox Code Playgroud) 我想匹配一个看起来像这样的表达式:
(<some value with spaces and m$1124any crazy signs> (<more values>) <even more>)
Run Code Online (Sandbox Code Playgroud)
我只是想沿着圆括号 () 拆分这些值。目前,我可以减少 s-expression 示例中的 pyparsing 开销,这非常广泛且无法理解(恕我直言)。
我尽可能使用该nestedExpr语句,将其减少为一行:
import pyparsing as pp
parser = pp.nestedExpr(opener='(', closer=')')
print parser.parseString(example, parseAll=True).asList()
Run Code Online (Sandbox Code Playgroud)
结果似乎也被分割在空白处,这是我不想要的:
skewed_output = [['<some',
'value',
'with',
'spaces',
'and',
'm$1124any',
'crazy',
'signs>',
['<more', 'values>'],
'<even',
'more>']]
expected_output = [['<some value with spaces and m$1124any crazy signs>'
['<more values>'], '<even more>']]
best_output = [['some value with spaces and m$1124any crazy signs'
['more vlaues'], 'even more']]
Run Code Online (Sandbox Code Playgroud)
或者,我很乐意指出我可以阅读一些 …
我正在尝试在我的计算机上安装airnotifier,但收到此错误
我的python版本是3.6
PS C:\airnotifier> python app.py
Traceback (most recent call last):
File "app.py", line 32, in <module>
from pushservices.bootstrap import init_messaging_agents
File "C:\airnotifier\pushservices\bootstrap.py", line 4, in <module>
from .fcm import FCMClient
File "C:\airnotifier\pushservices\fcm.py", line 5, in <module>
from oauth2client.service_account import ServiceAccountCredentials
File "C:\Users\smacrsadmin\AppData\Local\Programs\Python\Python36\lib\site-packages\oauth2client\service_account.py", line 25, in <module>
from oauth2client import client
File "C:\Users\smacrsadmin\AppData\Local\Programs\Python\Python36\lib\site-packages\oauth2client\client.py", line 39, in <module>
from oauth2client import transport
File "C:\Users\smacrsadmin\AppData\Local\Programs\Python\Python36\lib\site-packages\oauth2client\transport.py", line 17, in <module>
import httplib2
File "C:\Users\smacrsadmin\AppData\Local\Programs\Python\Python36\lib\site-packages\httplib2\__init__.py", line 52, in <module>
from . import auth
File …Run Code Online (Sandbox Code Playgroud) 我想我在打电话时犯了一个错误setResultsName():
from pyparsing import *
DEPT_CODE = Regex(r'[A-Z]{2,}').setResultsName("Dept Code")
COURSE_NUMBER = Regex(r'[0-9]{4}').setResultsName("Course Number")
COURSE_NUMBER.setParseAction(lambda s, l, toks : int(toks[0]))
course = DEPT_CODE + COURSE_NUMBER
course.setResultsName("course")
statement = course
Run Code Online (Sandbox Code Playgroud)
来自IDLE:
>>> myparser import *
>>> statement.parseString("CS 2110")
(['CS', 2110], {'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]})
Run Code Online (Sandbox Code Playgroud)
我希望的输出:
>>> myparser import *
>>> statement.parseString("CS 2110")
(['CS', 2110], {'Course': ['CS', 2110], 'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]})
Run Code Online (Sandbox Code Playgroud)
难道setResultsName()只为终端的工作吗?
我做了一个带有pyparsing的语法,我有一个问题.语法试图解析搜索查询(使用运算符优先级,括号等),我需要空格像和运算符一样工作.
例如,这工作正常:
(word and word) or word
Run Code Online (Sandbox Code Playgroud)
但这失败了:
(word word) or word
Run Code Online (Sandbox Code Playgroud)
我希望第二个查询像第一个查询一样工作.
我的实际语法是:
WWORD = printables.replace("(", "").replace(")", "")
QUOTED = quotedString.setParseAction(removeQuotes)
OAND = CaselessLiteral("and")
OOR = CaselessLiteral("or")
ONOT = "-"
TERM = (QUOTED | WWORD)
EXPRESSION = operatorPrecedence(TERM,
[
(ONOT, 1, opAssoc.RIGHT),
(OAND, 2, opAssoc.LEFT),
(OOR, 2, opAssoc.LEFT)
])
STRING = OneOrMore(EXPRESSION) + StringEnd()
Run Code Online (Sandbox Code Playgroud) 现在我刚刚开始使用pyparsing解析简单的后缀表达式.目前,我得到了这个:
from pyparsing import *
integer = Word(nums)
op = Word("+-*/^", max=1)
space = Word(" ")
expr = Word(nums)+space+Word(nums)+space+op
parsed = expr.parseString("3 4 *")
print parsed
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,它会打印:
Traceback (most recent call last):
File "star_parse.py", line 6, in <module>
parsed = expr.parseString("3 4 *")
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/pyparsing-1.5.5-py2.6.egg/pyparsing.py", line 1100, in parseString
raise exc
pyparsing.ParseException: Expected W:( ) (at char 2), (line:1, col:3)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我正在使用pyparsing来构建附加到列表的字典.当我这样做时,字典被包含在一个额外的列表中,并且还附加了一个空的字典.我不知道如何解决这个问题.我想要的是[{},{},{}].我得到了[([{}],{})]为什么getDict的代码给了我想要的东西而不是getDictParse?
#! /usr/bin/env python
from pyparsing import Literal, NotAny, Word, printables, Optional, Each, Combine, delimitedList, printables, alphanums, nums, White, OneOrMore, Group
noParseList = []
parseList = []
def getDict():
return {'duck':'moose','cow':'ewe'}
def getDictParse(str, loc, toks):
return {'duck2':toks[0],'cow2':'ewe'}
parser = Word(alphanums)
parser.setParseAction(getDictParse)
parseList.append(parser.parseString("monkey"))
noParseList.append(getDict())
print noParseList
print parseList
Run Code Online (Sandbox Code Playgroud)
输出:
[{'cow': 'ewe', 'duck': 'moose'}]
[([{'cow2': 'ewe', 'duck2': 'monkey'}], {})]
Run Code Online (Sandbox Code Playgroud) 我想使用优秀的pyparsing包以最常见的形式解析python函数调用.我读了一篇在这里有点用处但仍然不够通用的帖子.
我想解析以下表达式:
f(arg1,arg2,arg3,...,kw1=var1,kw2=var2,kw3=var3,...)
Run Code Online (Sandbox Code Playgroud)
哪里
我想知道是否可以为这样的通用模板定义语法.我或许要求太多了......你有什么想法吗?
非常感谢您的帮助
埃里克
我试图将lisp输入解析为python列表.但是当我解析输入时,我得到了字符串列表,但我希望将单个元素作为int.
示例:当我解析以下输入时:"(2 (10 (5 11))) (5 6) (4)"
输出:[[['2'], ['10', '5']], [['5'], ['6']], [['4']]]
我使用:[[map(int, x) for x in lst] for lst in test]转换字符串,int但此函数只解析2级嵌套列表.但如果我有一个超过2的嵌套列表,我应该如何使用它来解析?
我试过pyparsing但我没理解它.
我的原始问题是我正在尝试执行以下操作:
def submit_decoder_process(decoder, input_line):
decoder.process_line(input_line)
return decoder
self.pool = Pool(processes=num_of_processes)
self.pool.apply_async(submit_decoder_process, [decoder, input_line]).get()
Run Code Online (Sandbox Code Playgroud)
解码器在这里有点介绍,但重要的是解码器是一个用调用setParseAction()的PyParsing表达式初始化的对象.这会使多处理使用的pickle失败,这反过来又失败了上面的代码.
现在,这是我已经孤立和简化的pickle/PyParsing问题.由于pickle失败,以下代码会产生错误消息.
import pickle
from pyparsing import *
def my_pa_func():
pass
pickle.dumps(Word(nums).setParseAction(my_pa_func))
Run Code Online (Sandbox Code Playgroud)
错误信息:
pickle.PicklingError: Can't pickle <function wrapper at 0x00000000026534A8>: it's not found as pyparsing.wrapper
Run Code Online (Sandbox Code Playgroud)
现在,如果你删除调用.setParseAction(my_pa_func),它将没有问题:
pickle.dumps(Word(nums))
Run Code Online (Sandbox Code Playgroud)
我怎么能绕过它呢?多处理使用泡菜,所以我猜不出它.据说使用dill的pathos包不够成熟,至少,我在Windows-64bit上安装它时遇到问题.我真的在这里摸不着头脑.
python pickle pyparsing python-multithreading python-multiprocessing