- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在报告文件中有以下字符串:
"Bunch(conditions=['s1', 's2', 's3', 's4', 's5', 's6'], durations=[[30.0], [30.0], [30.0], [30.0], [30.0], [30.0]], onsets=[[172.77], [322.77], [472.77], [622.77], [772.77], [922.77]])"
我想把它变成一个 Bunch()
对象或一个 dict
,这样我就可以访问里面的信息(通过 my_var.conditions
或 my_var["conditions"]
).
这与 eval()
配合得很好:
eval("Bunch(conditions=['s1', 's2', 's3', 's4', 's5', 's6'], durations=[[30.0], [30.0], [30.0], [30.0], [30.0], [30.0]], onsets=[[172.77], [322.77], [472.77], [622.77], [772.77], [922.77]])")
但是我想避免使用它。
我尝试编写几个字符串替换,以便将其转换为 dict 语法,然后使用 json.loads()
解析它,但这看起来非常 hackish,并且会中断一旦我在未来的字符串中遇到任何新字段;例如:
"{"+"Bunch(conditions=['s1', 's2', 's3', 's4', 's5', 's6'], durations=[[30.0], [30.0], [30.0], [30.0], [30.0], [30.0]], onsets=[[172.77], [322.77], [472.77], [622.77], [772.77], [922.77]])"[1:-1]+"}".replace("conditions=","'conditions':")
你明白了。
你知道有没有更好的方法来解析这个?
最佳答案
此 pyparsing 代码将为您的 Bunch 声明定义一个解析表达式。
from pyparsing import (pyparsing_common, Suppress, Keyword, Forward, quotedString,
Group, delimitedList, Dict, removeQuotes, ParseResults)
# define pyparsing parser for the Bunch declaration
LBRACK,RBRACK,LPAR,RPAR,EQ = map(Suppress, "[]()=")
integer = pyparsing_common.integer
real = pyparsing_common.real
ident = pyparsing_common.identifier
# define a recursive expression for nested lists
listExpr = Forward()
listItem = real | integer | quotedString.setParseAction(removeQuotes) | Group(listExpr)
listExpr << LBRACK + delimitedList(listItem) + RBRACK
# define an expression for the Bunch declaration
BUNCH = Keyword("Bunch")
arg_defn = Group(ident + EQ + listItem)
bunch_decl = BUNCH + LPAR + Dict(delimitedList(arg_defn))("args") + RPAR
这是针对您的示例输入运行的解析器:
# run the sample input as a test
sample = """Bunch(conditions=['s1', 's2', 's3', 's4', 's5', 's6'],
durations=[[30.0], [30.0], [30.0], [30.0], [30.0], [30.0]],
onsets=[[172.77], [322.77], [472.77], [622.77], [772.77], [922.77]])"""
bb = bunch_decl.parseString(sample)
# print the parsed output as-is
print(bb)
给予:
['Bunch', [['conditions', ['s1', 's2', 's3', 's4', 's5', 's6']],
['durations', [[30.0], [30.0], [30.0], [30.0], [30.0], [30.0]]],
['onsets', [[172.77], [322.77], [472.77], [622.77], [772.77], [922.77]]]]]
使用 pyparsing,你还可以添加一个解析时回调,这样 pyparsing 就会为你做 tokens->Bunch 转换:
# define a simple placeholder class for Bunch
class Bunch(object):
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
def __repr__(self):
return "Bunch:(%s)" % ', '.join("%r: %s" % item for item in vars(self).items())
# add this as a parse action, and pyparsing will autoconvert the parsed data to a Bunch
bunch_decl.addParseAction(lambda t: Bunch(**t.args.asDict()))
现在解析器会给你一个实际的 Bunch 实例:
[Bunch:('durations': [[30.0], [30.0], [30.0], [30.0], [30.0], [30.0]],
'conditions': ['s1', 's2', 's3', 's4', 's5', 's6'],
'onsets': [[172.77], [322.77], [472.77], [622.77], [772.77], [922.77]])]
关于python - 从字符串中读取 Bunch(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37669160/
可以从 sklearn 获取“列标题”Bunch如Bunch.feature_names 。但是,这不会给出目标变量的“列标题”。如何获取目标变量的“列标题”? 例如对于 Iris 数据集: >>>
我在报告文件中有以下字符串: "Bunch(conditions=['s1', 's2', 's3', 's4', 's5', 's6'], durations=[[30.0], [30.0], [3
为了解析/创建 JSON 的简单性,机器学习应用程序通常使用 Bunch对象,例如https://github.com/dsc/bunch/blob/master/bunch/__init__.py
某些命令行工具允许“组合”短选项。 例如,tar 命令采用短选项 -x、-v 和 -f filespec。 它允许选项像 -xvf filespec 一样组合在一起,以避免空格破折号的冗余输入。 阅读
今天学习了《Python算法》这本书上的一个Bunch类 class Bunch(dict): def __init__(self, *args, **kwds): super
我有一个用于生成模式的 MySQL 工作台模型。为了玩弄它,我想要一堆假数据。有没有一种简单的方法来生成它,还是我必须手动完成? 最佳答案 这是我经常用来生成虚拟数据的网站。 http://www.g
我正在开发一个从服务器 API 下载图像的应用程序... 我们已经创建了一个 API,它提供图像 URL 的 JSON 响应... 我已经创建了用于显示图像的 GridView,它正在成功运行....
在我正在使用 Java 编写的程序中,我必须从文件中读取数据。数据经过格式化,以便每一行都包含构造新对象所需的所有信息。当我解析数据时,我有一个看起来像这样的代码块: String[] parts =
我需要在编译时计算传递给模板化结构的一堆数字的乘积。我成功地做了一个丑陋的解决方案: template struct mul_all { static constexpr std::size_
执行以下操作是否更快: if ($var != 'test1' && $var != 'test2' && $var != 'test3' && $var != 'test4') { ... } 或
几乎肯定是 XY problem但我想不出一种简洁的方式来表达我想做的事情。 我有一个文本区域。在此文本区域内,用户输入以逗号分隔的 ID 号列表。当他们单击“获取”时,我用逗号分隔他们的输入,以获取
我需要在几个事件结束时调用一个函数。假设我有 9 个点击监听器、10 个蓝色监听器、一些按键上/下监听器等。 解决方案是修改所有内容并添加函数调用。 但这……呃……蹩脚。 我是否可以一次性添加对所有事
var brightness = document.getElementById("brightness"); trash.addEventListener("click", function() {
希望这不是转载!我到处都看过,如果是的话,我很抱歉。 我有一个 position:fixed 标题 div,它有一些图像链接和一个登录 div。由于 position:fixed 是相对于窗口的,每当
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我正在创建一个模拟证券交易所市场的项目。我在一个大的 html 上向用户公开股票数据其中每个 行有两个 细胞。其中之一是公司的标志(即 AAPL),另一个是当前的市值(再简单不过了)。 我现在所做的
我的 python GAE 应用程序的中央应用程序文件如下所示: import webapp2 import homepage import user_auth import user_confirm
我正在尝试从一堆系统中获取 SSH 横幅。不幸的是,我需要输入密码才能让脚本进入下一个系统。 user@pc:~$ for i in {1..10}; do ssh 192.168.0.$i; don
在我的 spring mvc 3.0 项目中,我有一个充满 .jsp 文件(~150)的目录,我想将其置于 spring 的控制之下。 到目前为止,它们都是由 web.xml 直接调用,而不通过 sp
我正在屏幕上显示一些框。这些是指两种大小的容器。。在移动屏幕上,当屏幕水平宽度太小时,我希望框的大小减小-保持相同的纵横比。我如何才能做到这一点?我不太了解如何使用Flexbox来做到这一点。。。
我是一名优秀的程序员,十分优秀!