Python: in tệp ra stdout


89

Tôi đã tìm kiếm và tôi chỉ có thể tìm thấy câu hỏi về cách khác: ghi stdin vào một tệp :)

Có cách nào nhanh chóng và dễ dàng để kết xuất nội dung của tệp sang stdout không?

Câu trả lời:


122

Chắc chắn rồi. Giả sử bạn có một chuỗi với tên của tệp được gọi fname, thao tác sau sẽ thực hiện thủ thuật.

with open(fname, 'r') as fin:
    print(fin.read())

8
Lưu ý rằng điều này sẽ thêm một dòng mới ở cuối đầu ra.
DA

13
Đối với cả hai Python 3 khả năng tương thích tránh xuống dòng trailing, dòng cuối cùng có lẽ nên đọc: print(fin.read(), end=""). Để tận dụng giải pháp đó trong Python 2, from __future__ import print_functionsẽ cần một tiền tố . Tất nhiên, các ứng dụng Python 2 nên luôn sử dụng hàm Python 3 print()- vì vậy điều đó không quá nặng nề.
Cecil Curry,

42

Nếu đó là một tệp lớn và bạn không muốn tiêu tốn nhiều bộ nhớ như có thể xảy ra với giải pháp của Ben, mã bổ sung trong

>>> import shutil
>>> import sys
>>> with open("test.txt", "r") as f:
...    shutil.copyfileobj(f, sys.stdout)

cũng hoạt động.


18
f = open('file.txt', 'r')
print f.read()
f.close()

Từ http://docs.python.org/tutorial/inputoutput.html

Để đọc nội dung của tệp, hãy gọi f.read (size), nó sẽ đọc một số lượng dữ liệu và trả về dưới dạng một chuỗi. kích thước là một đối số số tùy chọn. Khi kích thước bị bỏ qua hoặc âm, toàn bộ nội dung của tệp sẽ được đọc và trả về; đó là vấn đề của bạn nếu tệp lớn gấp đôi bộ nhớ máy của bạn. Nếu không, tối đa các byte kích thước được đọc và trả về. Nếu đến cuối tệp, f.read () sẽ trả về một chuỗi rỗng ("").


7

Phiên bản rút gọn của tôi trong Python3

print(open('file.txt').read())

2
Lưu ý: điều này không đóng tệp.
Ben Caine

3

bạn cũng có thể thử cái này

print ''.join(file('example.txt'))


0

Bạn có thể thử điều này.

txt = <file_path>
txt_opn = open(txt)
print txt_opn.read()

Điều này sẽ cung cấp cho bạn đầu ra tệp.


0

Nếu bạn cần thực hiện việc này với pathlibmô-đun, bạn có thể sử dụng pathlib.Path.open()để mở tệp và in văn bản từ read():

from pathlib import Path

fpath = Path("somefile.txt")

with fpath.open() as f:
    print(f.read())

Hoặc đơn giản gọi pathlib.Path.read_text():

from pathlib import Path

fpath = Path("somefile.txt")

print(fpath.read_text())

0

Để cải thiện câu trả lời của @ bgporter, với Python-3, bạn có thể sẽ muốn hoạt động trên byte thay vì chuyển đổi mọi thứ thành utf-8 một cách không cần thiết:

>>> import shutil
>>> import sys
>>> with open("test.txt", "rb") as f:
...    shutil.copyfileobj(f, sys.stdout.buffer)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.