Python 2。**:如何将print语句的输出捕获到变量(而非文件),以便传递给df.query()函数

时间:2018-08-16 19:08:47

标签: python pandas printing pandas-query

编辑:解决方案!

事实证明,要做到这一点,我要做的就是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的输出。

再次感谢您!

1 个答案:

答案 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”;这样的字符串称为原始字符串,   反斜杠作为文字字符。