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.