2012-02-16 51 views
78

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

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. 

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

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

一个很好的解释,将不胜感激!

+3

你确定吗? 'print()'是python 3.x内置函数,而'print'是python <3.x运算符。这篇文章显示了'2.7.2 +'。 – khachik 2012-02-16 17:31:32

+2

您是否从__future__导入print_function?在Python <3中,print是一个声明: – Ari 2012-02-16 17:32:23

+1

不!我没有。你当然是对的。解决了这个问题。该死!因此,帮助(\ __ builtins__)中记录的打印是具有不同语法的打印版本(3.x)。非常感谢你,你也是,kachik – alex 2012-02-16 17:40:21

回答

117

如果你想使用print功能在Python 2,你必须从__future__导入:

from __future__ import print_function 

但是你可以有同样的效果,而无需使用的功能,太:

print >>f1, 'This is a test' 
50

print是python 2.X中的一个关键字。您应该使用以下内容:

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

print(args, file=f1)是python 3.x语法。 对于Python 2.x使用print >> f1, args

+3

我想你还应该提及'from __future__ import print_function'。然后你可以在Python 2和Python 3中使用清晰的符号。 – 2015-02-12 21:01:40

+0

@moose,已经有一个很好的甘达罗的答案,包括我的回答和你的笔记。 – citxx 2015-02-13 21:24:06

+0

我得到'AttributeError:'str'对象没有属性'write''与你的python3语法 – Suncatcher 2017-07-28 18:01:24

6

在Python 3.0+中,print是一个函数,您可以拨打print(...)。在较早的版本中,print陈述,您可以使用print ...

要打印到文件在Python 3.0之前,你会怎么做:

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

>>操作指引打印到文件f

+0

我想打印整个数组到文件。如果我使用你的代码,只打印出阵列的头部和尾部,就像从终端输出一样。如何将所有数组行打印到文件? – Sigur 2017-06-01 14:13:28

+0

@Sigur“就像从终端输出”对不起,但错误的其他地方。你不会告诉Python打印整个东西,这就是为什么它不是。 – wizzwizz4 2017-12-06 19:59:46

11

您可以将打印语句导出到文件而无需更改任何代码。只需打开一个终端窗口,并以这种方式运行代码:

python yourcode.py >> log.txt 
2

这将打印重定向到文件

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