编辑:解决方案!
事实证明,要做到这一点,我要做的就是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
打印它时,得到:
>>> print(queryStr)
'(1522000002801<=TIMESTAMP<=1522000034174 or
1522000048441<=TIMESTAMP<=1522000074589) and (RESOURCE==\'GTEX\' or
RESOURCE==\'MOD_FLYBASE\') and (ACTIVITY==\'REQ_RESOURCE\')'
哪一个反斜杠-正是我想传递给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)
的“输出”并将其完全按照打印的方式传递给df.query()
?
我知道我可以将print
的输出传递到文件中,然后引入这些行,但是我觉得这效率极低。
谢谢!
编辑:
请注意,queryStr
不是字符串的.__repr__()
,因为那样的话,在首个和最后一个引号之前将使用反斜杠。因此,使用涉及.__repr__()
或.__str__()
的解决方案是行不通的。我确实确实需要以某种方式“抢” print
的输出。
再次感谢您!
答案 0 :(得分:-1)
如果为字符串加上'r'前缀,它将向Python表示这是“原始字符串”,并将按您指定的方式精确地传递字符串 :
df.query(r"your \query")
这将传递字符串'y','o','u','r',','\','q','u','e','r','y' -完全按照您的指定加上一个反斜杠。
从Python文档:https://docs.python.org/3/reference/lexical_analysis.html
字符串和字节文字都可以选择加前缀 字母“ r”或“ R”;这样的字符串称为原始字符串, 反斜杠作为文字字符。