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

Python 2.*:如何将print语句的输出捕获到变量(而不是文件),以便传递到df.query()函数,python,pandas,printing,Python,Pandas,Printing,编辑:解决方案 事实证明,我所需要做的就是df.query({}.format(eval(queryStr)),Python将queryStr视为与print(queryStr)相同。我不建议一直使用eval,但在这种情况下,这是迄今为止我能找到的最好的解决方案 原始问题: 我有一个字符串(queryStr): 哪一个反斜杠--正是我想要传递给df.query()的反斜杠 因为当我运行df.query(queryStr) (运行带有两个反斜杠的df.query()),我得到一个错误。但当我跑步时

编辑:解决方案

事实证明,我所需要做的就是
df.query({}.format(eval(queryStr))
,Python将
queryStr
视为与
print(queryStr)
相同。我不建议一直使用
eval
,但在这种情况下,这是迄今为止我能找到的最好的解决方案

原始问题:

我有一个字符串(
queryStr
):

哪一个反斜杠--正是我想要传递给
df.query()
的反斜杠

因为当我运行
df.query(queryStr)

(运行带有两个反斜杠的
df.query()
),我得到一个错误。但当我跑步时:


df.query('(1522000002801如果在字符串前面加上'r',它将向Python指示它是一个“原始字符串”,并将按照指定的方式传递字符串:

df.query(r"your \query")
这将传递字符串“y”、“o”、“u”、“r”、“q”、“u”、“e”、“r”、“y”——其中一个反斜杠与您指定的完全相同

从Python文档中:

字符串和字节文本都可以选择前缀为 字母“r”或“r”;此类字符串称为原始字符串和treat 反斜杠作为文字字符


感谢您的输入。不幸的是,有两个问题:第一个问题是我使用的是python 2.*,而不是python 3。第二个问题是
>>>df.query(r'{}.format(queryStr))
将其视为
(1522000002801Raw字符串在Python 2中:您的字符串实际上没有那些双反斜杠,因此您试图解决的问题并不存在。您只是感到困惑,因为字符串的repr(Python在交互提示下计算字符串时向您显示的内容)会在字符串周围加上引号和反斜杠e但是这些不是字符串的一部分,它们只是由
repr
添加的。当您执行
print(s)
时,
print
函数只会对每个参数调用
str
,因此如果您想得到与
print
正在打印的字符串完全相同的字符串,可以使用
str(s)
。但是如果
s
已经是一个字符串,那么这样做没有意义-
str(s)
在这种情况下只返回
s
,因此您可以按原样使用
s
。这里的实际问题是您的
queryStr
已经是实际字符串的repr。您甚至不需要单个反斜杠,也不需要在其周围加引号。在某个地方,您在创建该字符串时犯了错误,这就是您需要的需要修复,而不是稍后使用该字符串的代码。另外@abarnert df.query(str())不受支持。这是什么意思?
df.query(str())
只是查询一个空字符串。但是
df.query(str(something))
很好。它通常不有用,因为
某物
通常已经是一个字符串(在您的例子中是这样的),但肯定得到了支持。
>>> print(queryStr)
'(1522000002801<=TIMESTAMP<=1522000034174 or
1522000048441<=TIMESTAMP<=1522000074589) and (RESOURCE==\'GTEX\' or
RESOURCE==\'MOD_FLYBASE\') and (ACTIVITY==\'REQ_RESOURCE\')'
       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
df.query(r"your \query")