我想处理表的csv数据而不是将其写入文件。如何将psycopg2 copy_expert()
重定向到变量中,如下所示:
var1 = cur.copy_expert("COPY test TO STDOUT WITH CSV HEADER", sys.stdout)
答案 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 object,copy_expert
期望第二个参数。