问题: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.

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

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

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

Why does trying to print directly to a file instead of sys.stdout produce the following syntax error:

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

From help(__builtins__) I have the following info:

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.

So what would be the right syntax to change the standard stream print writes to?

I know that there are different maybe better ways to write to file but I really don’t get why this should be a syntax error…

A nice explanation would be appreciated!


回答 0

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

from __future__ import print_function

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

print >>f1, 'This is a test'

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'

回答 1

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

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

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()

回答 2

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

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


回答 3

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

python yourcode.py >> log.txt

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

回答 4

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

import sys
sys.stdout = open("file.txt", "w+")
print "this line will redirect to file.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"

回答 5

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

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

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

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

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.


声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。