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

help (__ 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+.
khachik

2
당신은 from __future__ import print_function? Python <3에서 print는 다음과 같은 문장입니다.
Ari

1
아니! 나는하지 않았다. 물론 당신이 옳습니다. 그것은 문제를 해결합니다. 젠장! 따라서 help (_ builtins_ ) 의 문서화 된 인쇄 는 다른 구문을 가진 인쇄의 미래 (3.x) 버전입니다. 대단히 감사합니다 그리고 당신도 kachik
alex

2
IMO, help(__builtins__)그것을 표시하는 것은 버그입니다.
Wooble 2012

3
... 더 조사 해보면 python 2.7.2 에는 내장 인쇄 기능이 __builtins__.__dict__['print'](value, file=f1)있지만 일반적으로 쉽게 액세스 할 수는 없습니다 ( 하지만 작동합니다).
Wooble

답변:


138

printPython 2 에서 함수 를 사용하려면 다음에서 가져와야합니다 __future__.

from __future__ import print_function

그러나 함수를 사용하지 않고도 동일한 효과를 얻을 수 있습니다.

print >>f1, 'This is a test'

72

print는 파이썬 2.X의 키워드입니다. 다음을 사용해야합니다.

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

2
이것을 인쇄와 동일하게 만들려면 '\ n'을 추가해야합니다.
jlh

44

print(args, file=f1)파이썬 3.x 구문입니다. 파이썬 2.x의 경우 print >> f1, args.


3
또한 언급해야한다고 생각합니다 from __future__ import print_function. 그런 다음 Python 2와 3 모두에서 명확한 표기법을 사용할 수 있습니다.
Martin Thoma

@moose, 내 대답과 메모를 포함하는 훌륭한 Gandaro의 대답이 이미 있습니다.
citxx

2
내가 얻을 AttributeError: 'str' object has no attribute 'write'당신의 python3 구문을
Suncatcher

5
@Suncatcher, 아마도 실제 파일 개체 대신 파일 이름이 포함 된 문자열을 f1로 전달하려고 할 것입니다. : 먼저 파일을 쓰기 용으로 열 필요f1 = open('path_to_your_file', 'w')
citxx을

예, 파일 객체가 아닌 파일 이름이어야한다고 생각했습니다.
Suncatcher

13

코드를 변경하지 않고 print 문을 파일로 내보낼 수 있습니다. 터미널 창을 열고 다음과 같이 코드를 실행하기 만하면됩니다.

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

파이썬 3.0 이상에서, printA는 기능을 당신이 전화 것입니다, print(...). 이전 버전에서, printA는 당신이 만드는 것,print ... .

3.0 이전의 Python에서 파일로 인쇄하려면 다음을 수행하십시오.

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

>>운영자는 파일에 인쇄를 지시합니다 f.


전체 배열을 파일에 인쇄하고 싶습니다. 코드를 사용하면 터미널의 출력과 같이 배열의 머리와 꼬리 만 인쇄됩니다. 모든 배열 행을 파일에 인쇄하는 방법은 무엇입니까?
Sigur

@Sigur "터미널의 출력처럼"죄송합니다. 버그는 다른 곳에 있습니다. 당신은 파이썬에게 모든 것을 인쇄하라고 말하는 것이 아니기 때문에 그렇지 않습니다.
wizzwizz4
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.