Python 2.7: 打印到文件

为什么尝试直接打印到文件而不是 sys.stdout会产生以下语法错误:

Python 2.7.2+ (default, Oct  4 2011, 20:06:09)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f1=open('./testfile', 'w+')
>>> print('This is a test', file=f1)
File "<stdin>", line 1
print('This is a test', file=f1)
^
SyntaxError: invalid syntax

从帮助(_ _ builtins _ _)我有以下信息:

print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout)


Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep:  string inserted between values, default a space.
end:  string appended after the last value, default a newline.

那么,改变标准流打印写入的正确语法是什么呢?

我知道有不同的或许更好的方法来写入文件,但我真的不明白为什么这应该是一个语法错误..。

如果你能给我一个合理的解释,我将不胜感激!

324868 次浏览

print is a keyword in python 2.X. You should use the following:

f1=open('./testfile', 'w+')
f1.write('This is a test')
f1.close()

print(args, file=f1) is the python 3.x syntax. For python 2.x use print >> f1, args.

If you want to use the print function in Python 2, you have to import from __future__:

from __future__ import print_function

But you can have the same effect without using the function, too:

print >>f1, 'This is a test'

In Python 3.0+, print is a function, which you'd call with print(...). In earlier version, print is a statement, which you'd make with print ....

To print to a file in Python earlier than 3.0, you'd do:

print >> f, 'what ever %d', i

The >> operator directs print to the file f.

You can export print statement to file without changing any code. Simply open a terminal windows and run your code in this way:

python yourcode.py >> log.txt

This will redirect your 'print' output to a file:

import sys
sys.stdout = open("file.txt", "w+")
print "this line will redirect to file.txt"