Python 2.7:打印到文件

ale*_*lex 91 python file 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
Run Code Online (Sandbox Code Playgroud)

从帮助(__ 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.
Run Code Online (Sandbox Code Playgroud)

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

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

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

Gan*_*aro 131

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

from __future__ import print_function
Run Code Online (Sandbox Code Playgroud)

但是你也可以在不使用该功能的情况下获得相同的效果:

print >>f1, 'This is a test'
Run Code Online (Sandbox Code Playgroud)


Sim*_*got 68

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

f1=open('./testfile', 'w+')
f1.write('This is a test')
f1.close()
Run Code Online (Sandbox Code Playgroud)

  • 您需要添加“ \ n”以使其等同于打印。 (2认同)

cit*_*txx 40

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

  • @Suncatcher,您可能正在尝试将包含文件名的字符串作为f1而不是实际文件对象传递.您需要先打开文件进行写入:`f1 = open('path_to_your_file','w')` (4认同)
  • 我想你也应该提一下`from __future__ import print_function`.然后你可以在Python 2和3中使用clear notation. (3认同)
  • 我得到 `AttributeError: 'str' object has no attribute 'write'` 与你的 python3 语法 (2认同)

小智 13

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

python yourcode.py >> log.txt
Run Code Online (Sandbox Code Playgroud)


Dao*_*tor 11

这会将'print'输出重定向到文件:

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


Nam*_*yen 6

在Python 3.0+中,print是一个函数,您可以使用它print(...).在早期版本中,print是一个声明,您可以使用它print ....

要在早于3.0的Python中打印文件,您需要:

print >> f, 'what ever %d', i
Run Code Online (Sandbox Code Playgroud)

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

  • @Sigur“就像终端的输出”抱歉,但错误在其他地方。你并没有告诉 Python 打印整个内容,这就是为什么它不打印。 (2认同)