编辑:解决方案!!!
事实证明,我需要做的就是df.query('{}'.format(eval(queryStr)))
,Python将queryStr
视为与print(queryStr)
相同。我不建议一直使用eval
,但在这种情况下,这是目前为止我能找到的最好的解决方案。在
原始问题:
我有一个字符串(queryStr
):
>>> queryStr
"'(1522000002801<=TIMESTAMP<=1522000034174 or
1522000048441<=TIMESTAMP<=1522000074589) and (RESOURCE==\\'GTEX\\' or
RESOURCE==\\'MOD_FLYBASE\\') and (ACTIVITY==\\'REQ_RESOURCE\\')'"
(注意反斜杠——有2个)
当我打印它时,queryStr
,我得到:
哪一个反斜杠--正是我想传递给df.query()
的内容。在
因为当我运行df.query(queryStr)
(用两个反斜杠运行df.query()
),我得到一个错误。但当我跑的时候:
df.query('(1522000002801<=TIMESTAMP<=1522000034174 or 1522000048441<=TIMESTAMP<=1522000074589) and (RESOURCE==\'GTEX\' or RESOURCE==\'MOD_FLYBASE\') and (ACTIVITY==\'REQ_RESOURCE\')')
(df.query()
带1个反斜杠)
我得到了我想要的:
TIMESTAMP NODE ID REFID USER ACTIVITY RESOURCE
1 1522000016966 1 3 3 6 REQ_RESOURCE MOD_FLYBASE
4 1522000024848 1 6 6 10 REQ_RESOURCE GTEX
所以,我的问题是:
如何捕获print(queryStr)
的“output”并将其传递给df.query()
,就像它打印出来的那样?在
我知道我可以将print
的输出传递到一个文件,然后引入这些行,但我觉得这样做效率极低。
谢谢你!!在
编辑:
请注意,queryStr
不是字符串的.__repr__()
,因为在第一个和最后一个引号前面会有反斜杠。因此,使用涉及.__repr__()
或{print
。在
再次感谢你!在
如果您在字符串前面加上'r',它将向Python指明它是一个“原始字符串”,并将在指定字符串时准确地传递字符串:
这将传递字符串'y'、'o'、'u'、'r'、''、'、'、'、'、'q'、'u'、'e'、'r'、'y',与指定的一个反斜杠完全相同。在
来自Python文档:https://docs.python.org/3/reference/lexical_analysis.html
相关问题 更多 >
编程相关推荐