如何将psycopg2 copy_expert()输出重定向到变量?

时间:2015-10-23 17:18:11

标签: python stdout psycopg2

我想处理表的csv数据而不是将其写入文件。如何将psycopg2 copy_expert()重定向到变量中,如下所示:

var1 = cur.copy_expert("COPY test TO STDOUT WITH CSV HEADER", sys.stdout)

2 个答案:

答案 0 :(得分:1)

您可以暂时将sys.stdout重定向到Python 3.4中的字符串。

<强> contextlib.redirect_stdout(NEW_TARGET)

  

用于临时将sys.stdout重定向到另一个文件的上下文管理器   或类似文件的对象。

     

此工具为现有的函数或类增加了灵活性   输出硬连线到标准输出。

     

例如,help()的输出通常发送到sys.stdout。您   可以通过将输出重定向到a来捕获字符串中的输出   io.StringIO对象:

f = io.StringIO() 
with redirect_stdout(f):
    help(pow) 
s = f.getvalue()

https://docs.python.org/3.4/library/contextlib.html#contextlib.redirect_stdout

答案 1 :(得分:1)

不是将sys.stdout重定向到变量,而是直接替换sys.stdout更容易:

text_stream = io.StringIO()
cur.copy_expert("COPY test TO STDOUT WITH CSV HEADER", text_stream)
var1 = text_stream.getvalue()

这是有效的,因为io.StringIO会返回file objectcopy_expert期望第二个参数。