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
Из справки (__buildins__) у меня есть следующая информация:
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.
Так какой же будет правильный синтаксис для изменения стандартных потоковых записей?
Я знаю, что есть разные, возможно, лучшие способы записи в файл, но я действительно не понимаю, почему это должно быть синтаксической ошибкой...
Хорошее объяснение будет оценено!
6 ответов
Если вы хотите использовать print
функция в Python 2, вы должны импортировать из __future__
:
from __future__ import print_function
Но вы можете получить тот же эффект без использования функции:
print >>f1, 'This is a test'
print является ключевым словом в python 2.X. Вы должны использовать следующее:
f1=open('./testfile', 'w+')
f1.write('This is a test')
f1.close()
print(args, file=f1)
это синтаксис Python 3.x. Для Python 2.x используйте print >> f1, args
,
Это перенаправит ваш вывод на печать в файл:
import sys
sys.stdout = open("file.txt", "w+")
print "this line will redirect to file.txt"
Вы можете экспортировать выписку в файл без изменения кода. Просто откройте окно терминала и запустите ваш код следующим образом:
python yourcode.py >> log.txt
В Python 3.0+ print
это функция, которую вы бы назвали print(...)
, В более ранней версии, print
это заявление, которое вы бы сделали с print ...
,
Чтобы напечатать файл в Python ранее, чем 3.0, вы должны сделать:
print >> f, 'what ever %d', i
>>
оператор направляет печать в файл f
,