开发者

Redirect print in Python: val = print(arg) to output mixed iterable to file

开发者 https://www.devze.com 2022-12-24 00:38 出处:网络
So lets say I have an incredibly nested iterable of lists/dictionaries.I would like to print them to a file as easily as possible.Why can\'t I just redirect print to a file?

So lets say I have an incredibly nested iterable of lists/dictionaries. I would like to print them to a file as easily as possible. Why can't I just redirect print to a file?

val = print(arg) gets a SyntaxError.

Is there a way to access stdinput?

And why does print take forever with massive strings? Bad programming on my side for outputting massive strings, but quick debugging--and isn't that leveraging the strength of an interactive prompt?

There's probably also an easier 开发者_StackOverflowway than my gripe. Has the hive-mind an answer?


You could look into the logging module of Python. Perhaps that's the perfect match in this case.


You don't typically use print for writing to a file (though you technically can). You would use a file object for this.

with open(filename, 'w') as f:
    f.write(repr(your_thingy))

If print is taking forever to display a massive string, it is likely that it's not exactly print's fault, but the result of having to display all that to screen.


Seeing how you're using print as function, docs say that you can redirect to file like this:

print(arg, file=open('fname', 'w'))


In Python 3.*, to redirect one print call to an open file object destination,

print(arg, file=destination)

In Python 2.*, where print is a statement, the syntax is

print>>destination, arg

I imagine you're using 2.* because in 3.* assigning print's result is not a syntax error (it's just useless, since that result is None, but allowed). In 2.* print is a statement, not a function, so the code snippet you give is indeed a syntax error.

I'm not sure what the assignment is supposed to mean. If you want to redirect one or more print statements (or calls) to get the formatted result as an in-memory string, you can set sys.stdout to a StringIO (or cStringIO) instance; but you specifically mention "to a file" so I'm really perplexed as to the intended meaning of that assignment. Clarify pls?


I tried both examples with no success using python 2.7

To begin I created a file in C:\goat.text using notepad

Next I tried the following

import sys

print>>"C:\goat.txt", "test" error AttributeError: 'str' object has no attribute 'write'

print("test", file=open('C:\goat.txt', 'w'))

SyntaxError: ("no viable alternative at input '='", ('C:\Users\mike\AppData\Local\Temp\sikuli-tmp5165417708161227735.py', 3, 18, 'print("test", file=open(\'C:\\goat.txt\', \'w\')) \n'))

I've tried multiple variants annd can't solve this.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号