Hướng dẫn python redirect print output to file - python chuyển hướng đầu ra in sang tệp

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 python redirect print output to file - python chuyển hướng đầu ra in sang tệp

mkrieger1

Huy hiệu vàng 16K449 Huy hiệu bạc57 Huy hiệu đồng4 gold badges49 silver badges57 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.5K6 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
7 (trong Python 2 có toán tử
./script.py > out.txt
8 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ư

./script.py > out.txt
9:

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

Hướng dẫn python redirect print output to file - python chuyển hướng đầu ra in sang tệp

mkrieger1

Huy hiệu vàng 16K449 Huy hiệu bạc57 Huy hiệu đồng4 gold badges49 silver badges57 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
0

28.5K6 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
7 (trong Python 2 có toán tử
./script.py > out.txt
8 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 python redirect print output to file - python chuyển hướng đầu ra in sang tệp

mkrieger1

Huy hiệu vàng 16K449 Huy hiệu bạc57 Huy hiệu đồng4 gold badges49 silver badges57 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.5K6 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
7 (trong Python 2 có toán tử
./script.py > out.txt
8 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 python redirect print output to file - python chuyển hướng đầu ra in sang tệp

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ư

./script.py > out.txt
9:10 gold badges48 silver badges80 bronze badges

mkrieger1Jun 30, 2015 at 12:15

Hướng dẫn python redirect print output to file - python chuyển hướng đầu ra in sang tệp

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
1; 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
2,
f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
3 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
4 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
5 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 6, 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
7 bằng
f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
8, mà không có nội dung sẽ không được lưu trong tệpjpyams

Andy k7 gold badges35 silver badges61 bronze badges

2

4.80210 Huy hiệu vàng48 Huy hiệu bạc80 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

./script.py > out.txt
9, sử dụng
f.write('whatever')
0

Bạn có thể thay đổi

f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
3 để 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
./script.py > out.txt
9, hãy sử dụng mô -đun
f.write('whatever')
0.

Với

f.write('whatever')
0, 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
7 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')
6,
f.write('whatever')
7,
f.write('whatever')
8,
f.write('whatever')
9,
f.write(' '.join(('whatever', str(var2), 'etc')))
0), 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')
0, nhận
f.write(' '.join(('whatever', str(var2), 'etc')))
2 và đặt mức 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

./script.py > out.txt
9 Sử dụng một trong các phương pháp
f.write(' '.join(('whatever', str(var2), 'etc')))
2:

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')
0 nâng cao hơn, hãy đọc hướng dẫn
f.write('whatever')
0 xuất sắc trong các tài liệu Python.

Hướng dẫn python redirect print output to file - python chuyển hướng đầu ra in sang tệp

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

jpyamsjpyams27 gold badges250 silver badges298 bronze badges

3.6557 Huy hiệu vàng35 Huy hiệu bạc61 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')))
7) 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
./script.py > out.txt
9 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)
5 để 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)
6, để 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,5215 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
7 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)
6:

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

./script.py > out.txt
9 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 của
f = open(filename,'w')
print('whatever', file=f) # Python 3.x
print >>f, 'whatever'     # Python 2.x
7, 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 python redirect print output to file - python chuyển hướng đầu ra in sang tệp

GrahamgrahamGraham

2.5553 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 python redirect print output to file - python chuyển hướng đầu ra in sang tệp

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 python redirect print output to file - python chuyển hướng đầu ra in sang tệp

Arjun g perambraarjun g perambraArjun G Perambra

1.9991 Huy hiệu vàng17 Huy hiệu bạc17 Huy hiệu đồng1 gold badge17 silver badges17 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.32114 Huy hiệu bạc24 Huy hiệu đồng14 silver badges24 bronze badges

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

./script.py > out.txt
9:

./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)
2 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)
2 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 chức năng

./script.py > out.txt
9 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ở rộng chức năng in cho các vòng lặp

./script.py > out.txt
6

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

1

Làm cách nào để chuyển hướng đầu ra in vào một tệp trong Python?

Nếu đầu ra tiêu chuẩn được chuyển hướng đến một tệp cụ thể, văn bản được chỉ định trong hàm in () sẽ được ghi vào tệp đó thay vì được hiển thị trên màn hình. Trong Python, một tham chiếu đến đầu ra tiêu chuẩn có thể thu được bằng cách sử dụng đối tượng stdout của mô -đun SYS.using the stdout object of the sys module.

Làm cách nào để lưu đầu ra python vào tệp?

Để tạo và ghi vào một tệp mới, hãy sử dụng mở với tùy chọn W W W.Tùy chọn W W W sẽ xóa bất kỳ tệp hiện có nào trước đây và tạo một tệp mới để viết.Nếu bạn muốn nối vào một tệp hiện có, thì hãy sử dụng câu lệnh Open với tùy chọn của A A.Trong chế độ Phụ lục, Python sẽ tạo tệp nếu nó không tồn tại.use open with “w” option. The “w” option will delete any previous existing file and create a new file to write. If you want to append to an existing file, then use open statement with “a” option. In append mode, Python will create the file if it does not exist.

Làm cách nào để lưu đầu ra dưới dạng văn bản trong Python?

Để ghi vào tệp văn bản bằng Python, bạn làm theo các bước sau: Đầu tiên, hãy mở tệp văn bản để ghi (hoặc nối) bằng hàm Open ()..Third, Đóng tệp bằng phương thức đóng ().open the text file for writing (or append) using the open() function. Second, write to the text file using the write() or writelines() method. Third, close the file using the close() method.

Làm thế nào để bạn gán đầu ra in cho một biến trong Python?

Để gán đầu ra của hàm in () cho một biến: Xóa cuộc gọi cho hàm và gán đối số bạn đã chuyển để in () cho biến.Hàm in () chuyển đổi giá trị được cung cấp thành một chuỗi, in nó thành sys.Stdout và trả về không.Remove the call to the function and assign the argument you passed to print() to the variable. The print() function converts the provided value to a string, prints it to sys. stdout and returns None .