Hướng dẫn how do i redirect print output to a text file in python? - làm cách nào để chuyển hướng đầu ra bản in sang tệp văn bản trong python?

Cách rõ ràng nhất để làm điều này là in vào đối tượng tệp:

with open('out.txt', 'w') as f:
    print('Filename:', filename, file=f)  # Python 3.x
    print >> f, 'Filename:', filename     # Python 2.x

Tuy nhiên, việc chuyển hướng stdout cũng hoạt động cho tôi. Nó có lẽ là tốt cho một tập lệnh một lần như thế này:

import sys

orig_stdout = sys.stdout
f = open('out.txt', 'w')
sys.stdout = f

for i in range(2):
    print('i = ', i)

sys.stdout = orig_stdout
f.close()

Vì Python 3.4, có một trình quản lý bối cảnh đơn giản có sẵn để thực hiện việc này trong thư viện tiêu chuẩn:

from contextlib import redirect_stdout

with open('out.txt', 'w') as f:
    with redirect_stdout(f):
        print('data')

Chuyển hướng ra bên ngoài từ bản thân vỏ là một tùy chọn khác và thường thích hợp hơn:

./script.py > out.txt

Các câu hỏi khác:

Tên tệp đầu tiên trong tập lệnh của bạn là gì? Tôi không thấy nó được khởi tạo.

Dự đoán đầu tiên của tôi là Glob không tìm thấy bất kỳ bamfiles nào, và do đó, vòng lặp cho vòng không chạy. Kiểm tra xem thư mục có tồn tại không và in ra BamFiles trong tập lệnh của bạn.

Ngoài ra, sử dụng Os.Path.Join và Os.Path.Basename để thao túng các đường dẫn và tên tệp.

Hướng dẫn how do i redirect print output to a text file in python? - làm cách nào để chuyển hướng đầu ra bản in sang tệp văn bản trong python?

mkrieger1

16.2k4 Huy hiệu vàng50 Huy hiệu bạc58 Huy hiệu Đồng4 gold badges50 silver badges58 bronze badges

Đã trả lời ngày 22 tháng 8 năm 2011 lúc 20:00Aug 22, 2011 at 20:00

Gringo Suavegringo SuaveGringo Suave

28.6K6 Huy hiệu vàng84 Huy hiệu bạc74 Huy hiệu đồng6 gold badges84 silver badges74 bronze badges

12

Bạn có thể chuyển hướng in với đối số

./script.py > out.txt
9 (trong Python 2 có toán tử
f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
0 thay thế).

f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x

Trong hầu hết các trường hợp, tốt hơn hết là bạn nên viết vào tệp bình thường.

f.write('whatever')

Hoặc, nếu bạn có một số mục bạn muốn viết với khoảng trống giữa, như

f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
1:

f.write(' '.join(('whatever', str(var2), 'etc')))

Hướng dẫn how do i redirect print output to a text file in python? - làm cách nào để chuyển hướng đầu ra bản in sang tệp văn bản trong python?

mkrieger1

16.2k4 Huy hiệu vàng50 Huy hiệu bạc58 Huy hiệu Đồng4 gold badges50 silver badges58 bronze badges

Đã trả lời ngày 22 tháng 8 năm 2011 lúc 20:00Aug 22, 2011 at 19:56

3

Gringo Suavegringo Suave

f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
2

28.6K6 Huy hiệu vàng84 Huy hiệu bạc74 Huy hiệu đồng

Bạn có thể chuyển hướng in với đối số

./script.py > out.txt
9 (trong Python 2 có toán tử
f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
0 thay thế).

f = open(filename,'w') print('whatever', file=f) # Python 3.x print >>f, 'whatever' # Python 2.x

with open('file.txt', 'w') as f:
    print('hello world', file=f)

Trong hầu hết các trường hợp, tốt hơn hết là bạn nên viết vào tệp bình thường.

with open('file.txt', 'a') as f:
    print('hello world', file=f)

Hướng dẫn how do i redirect print output to a text file in python? - làm cách nào để chuyển hướng đầu ra bản in sang tệp văn bản trong python?

mkrieger1

16.2k4 Huy hiệu vàng50 Huy hiệu bạc58 Huy hiệu Đồng4 gold badges50 silver badges58 bronze badges

Đã trả lời ngày 22 tháng 8 năm 2011 lúc 20:00Jul 4, 2016 at 13:45

Gringo Suavegringo SuaveYeo

28.6K6 Huy hiệu vàng84 Huy hiệu bạc74 Huy hiệu đồng6 gold badges62 silver badges89 bronze badges

2

Bạn có thể chuyển hướng in với đối số

./script.py > out.txt
9 (trong Python 2 có toán tử
f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
0 thay thế).

import sys
sys.stdout=open("test.txt","w")
print ("hello")
sys.stdout.close()

f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x

Hướng dẫn how do i redirect print output to a text file in python? - làm cách nào để chuyển hướng đầu ra bản in sang tệp văn bản trong python?

Trong hầu hết các trường hợp, tốt hơn hết là bạn nên viết vào tệp bình thường.

Hoặc, nếu bạn có một số mục bạn muốn viết với khoảng trống giữa, như

f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
1:10 gold badges50 silver badges81 bronze badges

mkrieger1Jun 30, 2015 at 12:15

Hướng dẫn how do i redirect print output to a text file in python? - làm cách nào để chuyển hướng đầu ra bản in sang tệp văn bản trong python?

1

Đã trả lời ngày 22 tháng 8 năm 2011 lúc 19:56

Python 2 hoặc Python 3 Tham khảo API:

Đối số tệp phải là một đối tượng với phương thức

f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
3; Nếu nó không có mặt hoặc
f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
4,
f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
5 sẽ được sử dụng. Vì các đối số in được chuyển đổi thành chuỗi văn bản,
f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
6 không thể được sử dụng với các đối tượng tệp chế độ nhị phân. Đối với những điều này, hãy sử dụng
f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
7 thay thế.

Vì đối tượng tệp thường chứa phương thức f = open(filename,'w') print('whatever', file=f) # Python 3.x print >>f, 'whatever' # Python 2.x 8, tất cả những gì bạn cần làm là chuyển một đối tượng tệp vào đối số của nó.

Viết/ghi đè lên tệp

import sys

orig_stdout = sys.stdout
f = open('out.txt', 'w')
sys.stdout = f

for i in range(2):
    print('i = ', i)

sys.stdout = orig_stdout
f.close()
0

Viết/nối vào tệp

import sys

orig_stdout = sys.stdout
f = open('out.txt', 'w')
sys.stdout = f

for i in range(2):
    print('i = ', i)

sys.stdout = orig_stdout
f.close()
1

Đã trả lời ngày 4 tháng 7 năm 2016 lúc 13:45

import sys

orig_stdout = sys.stdout
f = open('out.txt', 'w')
sys.stdout = f

for i in range(2):
    print('i = ', i)

sys.stdout = orig_stdout
f.close()
2

Yeoyeo

import sys

orig_stdout = sys.stdout
f = open('out.txt', 'w')
sys.stdout = f

for i in range(2):
    print('i = ', i)

sys.stdout = orig_stdout
f.close()
3

10,9k6 huy hiệu vàng62 Huy hiệu bạc89 Huy hiệu đồng

Điều này hoạt động hoàn hảo:Jan 1, 2018 at 20:54

Bây giờ Hello sẽ được ghi vào tệp Test.txt. Đảm bảo đóng

f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
9 với
f.write('whatever')
0, mà không có nội dung sẽ không được lưu trong tệpjpyams

Andy k7 gold badges36 silver badges62 bronze badges

2

4.84210 Huy hiệu vàng 50 Huy hiệu bạc81 Huy hiệu Đồng

import sys

orig_stdout = sys.stdout
f = open('out.txt', 'w')
sys.stdout = f

for i in range(2):
    print('i = ', i)

sys.stdout = orig_stdout
f.close()
4

Đã trả lời ngày 30 tháng 6 năm 2015 lúc 12:15

import sys

orig_stdout = sys.stdout
f = open('out.txt', 'w')
sys.stdout = f

for i in range(2):
    print('i = ', i)

sys.stdout = orig_stdout
f.close()
5

Không sử dụng

f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
1, sử dụng
f.write('whatever')
2

Bạn có thể thay đổi

f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
5 để trỏ đến một tệp, nhưng đây là một cách khá cồng kềnh và không linh hoạt để xử lý vấn đề này. Thay vì sử dụng
f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
1, hãy sử dụng mô -đun
f.write('whatever')
2.

Với

f.write('whatever')
2, bạn có thể in giống như bạn làm
f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
9 hoặc bạn cũng có thể viết đầu ra vào một tệp. Bạn thậm chí có thể sử dụng các cấp tin nhắn khác nhau (
f.write('whatever')
8,
f.write('whatever')
9,
f.write(' '.join(('whatever', str(var2), 'etc')))
0,
f.write(' '.join(('whatever', str(var2), 'etc')))
1,
f.write(' '.join(('whatever', str(var2), 'etc')))
2), ví dụ, chỉ in các vấn đề lớn vào bảng điều khiển, nhưng vẫn đăng nhập các hành động mã nhỏ vào tệp.

Một ví dụ đơn giản

Nhập

f.write('whatever')
2, nhận
f.write(' '.join(('whatever', str(var2), 'etc')))
4 và đặt cấp độ xử lý:Aug 22, 2011 at 20:24

Nếu bạn muốn in vào stdout:Aaron Dufour

Nếu bạn cũng muốn ghi vào một tệp (nếu bạn chỉ muốn ghi vào tệp, hãy bỏ qua phần cuối cùng):1 gold badge48 silver badges68 bronze badges

3

Sau đó, bất cứ nơi nào bạn sẽ sử dụng

f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
1 sử dụng một trong các phương pháp
f.write(' '.join(('whatever', str(var2), 'etc')))
4:

import sys

orig_stdout = sys.stdout
f = open('out.txt', 'w')
sys.stdout = f

for i in range(2):
    print('i = ', i)

sys.stdout = orig_stdout
f.close()
6

Để tìm hiểu thêm về việc sử dụng các tính năng

f.write('whatever')
2 nâng cao hơn, hãy đọc hướng dẫn
f.write('whatever')
2 xuất sắc trong các tài liệu Python.

Hướng dẫn how do i redirect print output to a text file in python? - làm cách nào để chuyển hướng đầu ra bản in sang tệp văn bản trong python?

Đã trả lời ngày 1 tháng 1 năm 2018 lúc 20:54

jpyamsjpyams29 gold badges257 silver badges300 bronze badges

3.6757 Huy hiệu vàng36 Huy hiệu bạc62 Huy hiệu ĐồngJan 23, 2018 at 15:51

Giải pháp dễ nhất không phải là thông qua Python; Nó thông qua vỏ. Từ dòng đầu tiên của tệp của bạn (

f.write(' '.join(('whatever', str(var2), 'etc')))
9) Tôi đoán bạn đang ở trên một hệ thống Unix. Chỉ cần sử dụng các câu lệnh
f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
1 như bạn thường làm và không mở tệp trong tập lệnh của bạn. Khi bạn đi chạy tập tin, thay vìyunus

Để chạy tệp, sử dụng1 gold badge14 silver badges12 bronze badges

0

Bạn có thể không thích câu trả lời này, nhưng tôi nghĩ đó là đúng. Đừng thay đổi điểm đến stdout của bạn trừ khi nó hoàn toàn cần thiết (có thể bạn đang sử dụng thư viện chỉ xuất ra stdout ??? rõ ràng không phải là trường hợp ở đây).

Tôi nghĩ như một thói quen tốt, bạn nên chuẩn bị dữ liệu của mình trước thời hạn như một chuỗi, sau đó mở tập tin của bạn và viết toàn bộ mọi thứ cùng một lúc. Điều này là do các hoạt động đầu vào/đầu ra là bạn có khả năng xử lý tệp dài hơn, càng có nhiều lỗi xảy ra với tệp này (lỗi khóa tệp, lỗi I/O, v.v.). Chỉ cần thực hiện tất cả trong một hoạt động mà không còn câu hỏi nào khi nó có thể sai.

Đây là một ví dụ:

import sys

orig_stdout = sys.stdout
f = open('out.txt', 'w')
sys.stdout = f

for i in range(2):
    print('i = ', i)

sys.stdout = orig_stdout
f.close()
7

Và sau đó, khi bạn hoàn thành việc thu thập "dòng dữ liệu" của mình cho mỗi mục danh sách, bạn có thể tham gia cùng họ với một số ký tự

with open('file.txt', 'w') as f:
    print('hello world', file=f)
7 để tạo ra toàn bộ điều có thể xuất hiện; Thậm chí có thể bọc câu lệnh đầu ra của bạn trong khối
with open('file.txt', 'w') as f:
    print('hello world', file=f)
8, để có thêm sự an toàn (sẽ tự động đóng tay cầm đầu ra của bạn ngay cả khi có sự cố xảy ra):

import sys

orig_stdout = sys.stdout
f = open('out.txt', 'w')
sys.stdout = f

for i in range(2):
    print('i = ', i)

sys.stdout = orig_stdout
f.close()
8

Tuy nhiên, nếu bạn có rất nhiều dữ liệu để viết, bạn có thể viết nó từng lần một. Tôi không nghĩ rằng nó có liên quan đến ứng dụng của bạn nhưng đây là sự thay thế:could write it one piece at a time. I don't think it's relevant to your application but here's the alternative:

import sys

orig_stdout = sys.stdout
f = open('out.txt', 'w')
sys.stdout = f

for i in range(2):
    print('i = ', i)

sys.stdout = orig_stdout
f.close()
9

Đã trả lời ngày 22 tháng 8 năm 2011 lúc 20:20Aug 22, 2011 at 20:20

Machine khao khát khao khátmachine yearning

9.5715 huy hiệu vàng36 Huy hiệu bạc51 Huy hiệu đồng5 gold badges36 silver badges51 bronze badges

8

Nếu chuyển hướng

f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
9 hoạt động cho vấn đề của bạn, câu trả lời của Gringo Suave là một minh chứng tốt cho cách thực hiện.

Để làm cho nó trở nên dễ dàng hơn, tôi đã tạo một phiên bản sử dụng BusterManagers cho một cú pháp gọi tổng quát ngắn gọn bằng cách sử dụng câu lệnh

with open('file.txt', 'w') as f:
    print('hello world', file=f)
8:

from contextlib import redirect_stdout

with open('out.txt', 'w') as f:
    with redirect_stdout(f):
        print('data')
0

Để sử dụng nó, bạn chỉ cần làm như sau (bắt nguồn từ ví dụ của Suave):

from contextlib import redirect_stdout

with open('out.txt', 'w') as f:
    with redirect_stdout(f):
        print('data')
1

Nó hữu ích cho việc chuyển hướng chọn lọc

f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
1 khi một mô -đun sử dụng nó theo cách bạn không thích. Nhược điểm duy nhất (và đây là Dealbreaker cho nhiều tình huống) là nó không hoạt động nếu người ta muốn nhiều luồng có các giá trị khác nhau là
f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
9, nhưng điều đó đòi hỏi một phương pháp tốt hơn, tổng quát hơn: truy cập mô -đun gián tiếp. Bạn có thể thấy việc thực hiện điều đó trong các câu trả lời khác cho câu hỏi này.

Đã trả lời ngày 6 tháng 1 năm 2019 lúc 4:48Jan 6, 2019 at 4:48

Hướng dẫn how do i redirect print output to a text file in python? - làm cách nào để chuyển hướng đầu ra bản in sang tệp văn bản trong python?

GrahamgrahamGraham

2.5853 Huy hiệu vàng15 Huy hiệu bạc 30 Huy hiệu Đồng3 gold badges15 silver badges30 bronze badges

2

Đây là một phương thức khác mà tôi đã sử dụng để in vào tệp/nhật ký ... Sửa đổi chức năng in tích hợp để nó đăng nhập vào một tệp trong thư mục temp với dấu thời gian hiện tại, cũng như in vào stdout. Lợi thế thực sự duy nhất để làm điều này trong một tập lệnh là không phải đi và sửa đổi các câu lệnh in hiện có.

from contextlib import redirect_stdout

with open('out.txt', 'w') as f:
    with redirect_stdout(f):
        print('data')
2
from contextlib import redirect_stdout

with open('out.txt', 'w') as f:
    with redirect_stdout(f):
        print('data')
3

Sao chép chức năng in gốc vào biến mới

from contextlib import redirect_stdout

with open('out.txt', 'w') as f:
    with redirect_stdout(f):
        print('data')
4
from contextlib import redirect_stdout

with open('out.txt', 'w') as f:
    with redirect_stdout(f):
        print('data')
5

Ghi đè chức năng in hiện có

from contextlib import redirect_stdout

with open('out.txt', 'w') as f:
    with redirect_stdout(f):
        print('data')
6
from contextlib import redirect_stdout

with open('out.txt', 'w') as f:
    with redirect_stdout(f):
        print('data')
7
from contextlib import redirect_stdout

with open('out.txt', 'w') as f:
    with redirect_stdout(f):
        print('data')
8

Hiển thị tệp

from contextlib import redirect_stdout

with open('out.txt', 'w') as f:
    with redirect_stdout(f):
        print('data')
9
./script.py > out.txt
0

Xóa tệp

./script.py > out.txt
1

Đã trả lời ngày 25 tháng 1 lúc 15:28Jan 25 at 15:28

Hướng dẫn how do i redirect print output to a text file in python? - làm cách nào để chuyển hướng đầu ra bản in sang tệp văn bản trong python?

TCB919TCB919TCB919

Phù hiệu đồng 12366 bronze badges

Tôi có thể bẻ khóa điều này bằng phương pháp sau. Nó sẽ sử dụng chức năng in này thay vì chức năng in tích hợp và lưu nội dung vào một tệp.

./script.py > out.txt
2

Đã trả lời ngày 18 tháng 9 năm 2021 lúc 19:51Sep 18, 2021 at 19:51

Hướng dẫn how do i redirect print output to a text file in python? - làm cách nào để chuyển hướng đầu ra bản in sang tệp văn bản trong python?

Arjun Garjun gArjun G

2.0441 Huy hiệu vàng18 Huy hiệu bạc18 Huy hiệu đồng1 gold badge18 silver badges18 bronze badges

2

Thay đổi giá trị của sys.stdout không thay đổi điểm đến của tất cả các cuộc gọi để in. Nếu bạn sử dụng một cách khác để thay đổi điểm đến của in, bạn sẽ nhận được kết quả tương tự.

Lỗi của bạn ở một nơi khác:

  • Nó có thể nằm trong mã bạn đã xóa cho câu hỏi của bạn (tên tệp đến từ đâu để gọi mở?)
  • Nó cũng có thể là bạn không chờ dữ liệu được xóa: Nếu bạn in trên thiết bị đầu cuối, dữ liệu sẽ được xóa sau mỗi dòng mới, nhưng nếu bạn in vào tệp, nó chỉ được xóa khi bộ đệm stdout đầy đủ (4096 byte Trên hầu hết các hệ thống).

Đã trả lời ngày 22 tháng 8 năm 2011 lúc 20:05Aug 22, 2011 at 20:05

JeromejeromeJerome

2.33114 Huy hiệu bạc24 Huy hiệu đồng14 silver badges24 bronze badges

Trong Python 3, bạn có thể chỉ định lại

f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
1:

./script.py > out.txt
3

Lưu ý rằng bản in từ

with open('file.txt', 'a') as f:
    print('hello world', file=f)
4 chỉ chuyển đổi đầu ra vì in đang được gán lại trong phạm vi toàn cầu. Nếu chúng ta gán bản in trong một hàm, bản in trong
with open('file.txt', 'a') as f:
    print('hello world', file=f)
4 thường không bị ảnh hưởng. Chúng ta có thể sử dụng từ khóa toàn cầu nếu chúng ta muốn ảnh hưởng đến tất cả các cuộc gọi in:

./script.py > out.txt
4

Cá nhân, tôi thích Sidestepping yêu cầu sử dụng hàm

f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
1 bằng cách nướng bộ mô tả tệp đầu ra vào một hàm mới:

./script.py > out.txt
5

Đã trả lời ngày 8 tháng 12 năm 2020 lúc 19:04Dec 8, 2020 at 19:04

ShawnshawnShawn

6115 Huy hiệu bạc10 Huy hiệu đồng5 silver badges10 bronze badges

Một cái gì đó mà tôi đã sử dụng trong quá khứ để xuất ra một số từ điển là như sau:

./script.py > out.txt
6

Tệp xuất ra sẽ trông giống như dưới đây:

./script.py > out.txt
7

Đã trả lời ngày 21 tháng 11 lúc 22:04Nov 21 at 22:04

GSAGSAGSA

5554 Huy hiệu bạc12 Huy hiệu đồng4 silver badges12 bronze badges

Một cái gì đó để mở rộng chức năng in cho các vòng lặp

./script.py > out.txt
8

Đã trả lời ngày 16 tháng 7 năm 2017 lúc 19:34Jul 16, 2017 at 19:34

1