2012-02-16 40 views
78

Tại sao cố gắng để in trực tiếp vào một tập tin thay vì sys.stdout sản xuất các lỗi cú pháp sau:Python 2.7: Print to File

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 

Từ sự giúp đỡ (__ builtins__) Tôi có các thông tin sau:

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. 

Vậy cú pháp chính xác để thay đổi bản in luồng chuẩn sẽ ghi là gì?

Tôi biết rằng có những khác nhau cách thể tốt hơn để ghi ra tập tin nhưng tôi thực sự không hiểu tại sao điều này phải là một lỗi cú pháp ...

Một lời giải thích tốt đẹp sẽ được đánh giá cao!

+3

Bạn có chắc chắn? 'print()' là hàm dựng sẵn python 3.x, còn 'print' là toán tử python <3.x. Bài đăng hiển thị '2.7.2 +'. – khachik

+2

Bạn có 'from __future__ import print_function' không? Trong Python <3, in là một câu lệnh: – Ari

+1

Không! Tôi đã không. Tất nhiên bạn có quyền. Điều đó giải quyết vấn đề. Chết tiệt! Vì vậy, in tài liệu trong trợ giúp (\ __ builtins__) là phiên bản in tương lai (3.x) có một cú pháp khác. Cảm ơn bạn rất nhiều và bạn cũng vậy, kachik – alex

Trả lời

117

Nếu bạn muốn sử dụng print hàm trong Python 2, bạn phải nhập khẩu từ __future__:

from __future__ import print_function 

Nhưng bạn có thể có tác dụng tương tự mà không sử dụng các chức năng, quá:

print >>f1, 'This is a test' 
50

in là từ khóa trong python 2.X. Bạn nên sử dụng các mục sau:

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

print(args, file=f1) là cú pháp python 3.x. Để sử dụng trăn 2.x print >> f1, args.

+3

Tôi nghĩ bạn cũng nên đề cập đến 'từ __future__ import print_function'. Sau đó, bạn có thể sử dụng ký pháp rõ ràng trong cả hai, Python 2 và 3. –

+0

@moose, đã có một câu trả lời tuyệt vời của Gandaro, bao gồm câu trả lời của tôi và ghi chú của bạn. – citxx

+0

Tôi nhận được 'AttributeError: 'str' đối tượng không có thuộc tính 'write'' với cú pháp python3 của bạn – Suncatcher

6

Trong Python 3.0+, print là một chức năng , mà bạn muốn gọi với print(...). Trong phiên bản trước đó, print là một tuyên bố , mà bạn muốn thực hiện với print ....

Để in vào một tập tin bằng Python sớm hơn 3.0, bạn muốn làm:

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

Nhà điều hành >> đạo in vào file f.

+0

Tôi muốn in toàn bộ mảng vào tệp. Nếu tôi sử dụng mã của bạn, chỉ có đầu và đuôi của mảng được in, giống như đầu ra từ thiết bị đầu cuối. Làm thế nào để in tất cả các dòng mảng vào tập tin? – Sigur

+0

@Sigur "Giống như đầu ra từ thiết bị đầu cuối" Xin lỗi, nhưng lỗi ở nơi khác. Bạn không nói với Python để in toàn bộ điều, đó là lý do tại sao nó không. – wizzwizz4

11

Bạn có thể xuất bản in ra tệp mà không thay đổi bất kỳ mã nào. Đơn giản chỉ cần mở một cửa sổ terminal và chạy mã của bạn theo cách này:

python yourcode.py >> log.txt 
2

này sẽ chuyển hướng in của bạn vào một tập tin

import sys 
sys.stdout = open("file.xt", "w+") 
print "this line will redirect to file.txt"