Python 2.7:打印到文件


97

为什么尝试直接打印到文件而不是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.

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

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

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


3
你确定吗?print()是python 3.x内置函数,而printpython <3.x运算符。帖子显示2.7.2+
卡其色

2
from __future__ import print_function吗 在Python <3中,print是一条语句:
Ari

1
没有!我没有 你当然是对的。那解决了问题。该死!因此,在help(_ Builtins_)中记录的打印文件是将来的(3.x)版本的打印文件,其语法有所不同。非常感谢,您也谢谢,kachik
alex

2
海事组织,help(__builtins__)表明这根本是一个错误。
Wooble 2012年

3
...尽管进一步研究,python 2.7.2 确实具有内置的打印功能,但是您通常无法轻松地正常访问它(__builtins__.__dict__['print'](value, file=f1)尽管可以工作)。
Wooble

Answers:


138

如果要print在Python 2中使用该函数,则必须从导入__future__

from __future__ import print_function

但是,即使不使用该函数,也可以达到相同的效果:

print >>f1, 'This is a test'

72

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

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

2
您需要添加“ \ n”以使其等同于打印。
jlh

44

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


3
我想你也应该提一下from __future__ import print_function。然后你可以使用在两个清晰的符号,Python 2和3
马丁托马

@moose,已经有一个出色的Gandaro答案,其中包括我的答案和您的注释。
citxx

2
AttributeError: 'str' object has no attribute 'write'使用了您的python3语法
Suncatcher

5
@Suncatcher,您可能正在尝试将包含文件名的字符串作为f1而不是实际的文件对象传递。您需要首先打开文件才能写入:f1 = open('path_to_your_file', 'w')
citxx '17

是的,我认为应该是文件名,而不是文件对象。
Suncatcher

13

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

python yourcode.py >> log.txt

11

这会将您的“打印”输出重定向到文件:

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

是猴子修补吗?
Sarath Sadasivan Pillai

6

在Python 3.0+中,print是一个函数,您可以使用调用它print(...)。在较早的版本中,print是一个声明,您可以使用进行声明print ...

要在Python 3.0之前的版本中打印到文件,请执行以下操作:

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

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


我想将整个数组打印到文件中。如果我使用您的代码,则仅打印数组的开头和结尾,就像终端的输出一样。如何将所有数组行打印到文件?
Sigur

@Sigur“就像终端的输出一样”对不起,但该错误在其他地方。您不是要让Python打印整个内容,这就是为什么不这样做。
wizzwizz4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.