Phiên bản đơn giản
Một cách là sử dụng ký tự trả về vận chuyển [
for x in range[10]:
print '{0}\r'.format[x],
print
5] để trở về đầu dòng mà không tiến tới dòng tiếp theo.Python 3
for x in range[10]:
print[x, end='\r']
print[]
Python 2.7 tương thích về phía trước
from __future__ import print_function
for x in range[10]:
print[x, end='\r']
print[]
Python 2.7
for x in range[10]:
print '{}\r'.format[x],
print
Python 2.0-2.6
for x in range[10]:
print '{0}\r'.format[x],
print
Trong hai trường hợp sau [chỉ có 2 [Python 2], dấu phẩy ở cuối câu lệnh in cho biết họ không đi đến dòng tiếp theo. Câu lệnh in cuối cùng tiến lên dòng tiếp theo để lời nhắc của bạn sẽ không ghi đè lên đầu ra cuối cùng của bạn.
Làm sạch dòng
Nếu bạn có thể đảm bảo rằng dòng văn bản mới không ngắn hơn dòng hiện tại, thì bạn chỉ cần thêm một chuỗi rõ ràng để kết thúc chuỗi thoát khỏi dòng,
for x in range[10]:
print '{0}\r'.format[x],
print
6 [for x in range[10]:
print '{0}\r'.format[x],
print
7 = ESC]:for x in range[75]:
print['*' * [75 - x], x, end='\x1b[1K\r']
print[]
Đã trả lời ngày 24 tháng 3 năm 2011 lúc 12:56Mar 24, 2011 at 12:56
Mike Desimonemike DesimoneMike DeSimone
40.6K10 Huy hiệu vàng71 Huy hiệu bạc95 Huy hiệu Đồng10 gold badges71 silver badges95 bronze badges
12
Kể từ khi tôi kết thúc ở đây thông qua Google nhưng đang sử dụng Python 3, đây là cách thức hoạt động của Python 3:
for x in range[10]:
print["Progress {:2.1%}".format[x / 10], end="\r"]
Câu trả lời liên quan ở đây: Làm thế nào tôi có thể đàn áp dòng mới sau một câu lệnh in?
Đã trả lời ngày 17 tháng 2 năm 2014 lúc 21:56Feb 17, 2014 at 21:56
PascalpascalPascal
16.7K4 Huy hiệu vàng59 Huy hiệu bạc67 Huy hiệu Đồng4 gold badges59 silver badges67 bronze badges
4
@Mike Desimone Trả lời có thể sẽ hoạt động hầu hết thời gian. Nhưng mà...
for x in ['abc', 1]:
print '{}\r'.format[x],
-> 1bc
Điều này là do
for x in range[10]:
print '{0}\r'.format[x],
print
5 chỉ quay trở lại đầu dòng nhưng không xóa đầu ra.Nếu hỗ trợ POSIX là đủ cho bạn, thì điều sau đây sẽ xóa dòng hiện tại và để con trỏ lúc bắt đầu:
print '\x1b[2K\r',
Nó sử dụng mã thoát ANSI để xóa dòng thiết bị đầu cuối. Thông tin thêm có thể được tìm thấy trong Wikipedia và trong cuộc nói chuyện tuyệt vời này.
Cách tiếp cận khác
Giải pháp khác, [có thể nói tồi tệ hơn] mà tôi đã tìm thấy trông như thế này:
last_x = ''
for x in ['abc', 1]:
print ' ' * len[str[last_x]] + '\r',
print '{}\r'.format[x],
last_x = x
-> 1
Một lợi thế là nó cũng sẽ hoạt động trên Windows.
Tế bào thần kinh
4.6824 Huy hiệu vàng33 Huy hiệu bạc54 Huy hiệu Đồng4 gold badges33 silver badges54 bronze badges
Đã trả lời ngày 3 tháng 8 năm 2014 lúc 13:27Aug 3, 2014 at 13:27
Nagasaki45Nagasaki45Nagasaki45
2.4641 Huy hiệu vàng21 Huy hiệu bạc27 Huy hiệu đồng1 gold badge21 silver badges27 bronze badges
1
Tôi đã có cùng một câu hỏi trước khi truy cập chủ đề này. Đối với tôi, sys.stdout.write chỉ hoạt động nếu tôi xả đúng bộ đệm, tức là.
for x in range[10]:
sys.stdout.write['\r'+str[x]]
sys.stdout.flush[]
Không cần xả, kết quả chỉ được in ở cuối tập lệnh
Sна đ шƒаӽ
15.8K12 Huy hiệu vàng73 Huy hiệu bạc87 Huy hiệu đồng12 gold badges73 silver badges87 bronze badges
Đã trả lời ngày 2 tháng 8 năm 2015 lúc 23:47Aug 2, 2015 at 23:47
user2793078user2793078user2793078
3996 Huy hiệu bạc12 Huy hiệu Đồng6 silver badges12 bronze badges
2
Bị ngăn chặn dòng mới và in
for x in range[10]:
print '{0}\r'.format[x],
print
9.from __future__ import print_function
for x in range[10]:
print[x, end='\r']
print[]
0Hoặc viết thư cho stdout:
from __future__ import print_function
for x in range[10]:
print[x, end='\r']
print[]
1
ASHASTRAL
2.7581 Huy hiệu vàng20 Huy hiệu bạc32 Huy hiệu Đồng1 gold badge20 silver badges32 bronze badges
Đã trả lời ngày 24 tháng 3 năm 2011 lúc 12:53Mar 24, 2011 at 12:53
0
from __future__ import print_function
for x in range[10]:
print[x, end='\r']
print[]
2Time.Sleep [0.5] là để hiển thị cách xóa đầu ra trước đó và đầu ra mới được in "\ r" khi nó bắt đầu thông báo in, nó sẽ xóa đầu ra trước đó trước đầu ra mới.
Zim
3893 Huy hiệu bạc13 Huy hiệu Đồng3 silver badges13 bronze badges
Đã trả lời ngày 9 tháng 4 năm 2017 lúc 3:20Apr 9, 2017 at 3:20
RubixRedrubixredRubixred
Huy hiệu đồng 1491 Bạc4 Huy hiệu đồng1 silver badge4 bronze badges
Thử cái này:
from __future__ import print_function
for x in range[10]:
print[x, end='\r']
print[]
3Nó làm việc cho tôi. Phần
for x in range[75]:
print['*' * [75 - x], x, end='\x1b[1K\r']
print[]
0 đang làm cho nó ghi đè lên dòng trước.WARNING!
Nếu bạn in ra
for x in range[75]:
print['*' * [75 - x], x, end='\x1b[1K\r']
print[]
1, sau đó in ra for x in range[75]:
print['*' * [75 - x], x, end='\x1b[1K\r']
print[]
2 bằng for x in range[10]:
print '{0}\r'.format[x],
print
9, bạn sẽ nhận được for x in range[75]:
print['*' * [75 - x], x, end='\x1b[1K\r']
print[]
4 vì đầu ra đã viết qua hai chữ cái trước đó. Nếu bạn in ra for x in range[75]:
print['*' * [75 - x], x, end='\x1b[1K\r']
print[]
1 với không gian [mà don lồng hiển thị ở đây], thì nó sẽ xuất ra for x in range[75]:
print['*' * [75 - x], x, end='\x1b[1K\r']
print[]
1. Để khắc phục điều này, in ra không gian bằng for x in range[10]:
print '{0}\r'.format[x],
print
9.Đã trả lời ngày 20 tháng 6 năm 2016 lúc 0:20Jun 20, 2016 at 0:20
E.T.E.T.E.T.
5845 Huy hiệu bạc16 Huy hiệu đồng5 silver badges16 bronze badges
2
Điều này hoạt động trên Windows và Python 3.6
from __future__ import print_function
for x in range[10]:
print[x, end='\r']
print[]
4Đã trả lời ngày 1 tháng 8 năm 2018 lúc 17:16Aug 1, 2018 at 17:16
Dưới đây là phiên bản "Plug-and-Play", của câu trả lời của @nagasaki45. Không giống như nhiều câu trả lời khác ở đây, nó hoạt động đúng với các chuỗi có độ dài khác nhau. Nó đạt được điều này bằng cách xóa dòng với nhiều khoảng trống như chiều dài của dòng in cuối cùng được in. Cũng sẽ hoạt động trên Windows.
from __future__ import print_function
for x in range[10]:
print[x, end='\r']
print[]
5Cách sử dụng
Đơn giản chỉ cần sử dụng nó như thế này:
from __future__ import print_function
for x in range[10]:
print[x, end='\r']
print[]
6Thử nghiệm nhỏ này cho thấy các dòng được xóa đúng cách, ngay cả đối với các độ dài khác nhau:
from __future__ import print_function
for x in range[10]:
print[x, end='\r']
print[]
7Đã trả lời ngày 13 tháng 5 năm 2017 lúc 10:46May 13, 2017 at 10:46
Erberberb
13.4K4 Huy hiệu vàng30 Huy hiệu bạc35 Huy hiệu đồng4 gold badges30 silver badges35 bronze badges
1
Tôi không thể nhận được bất kỳ giải pháp nào trên trang này để làm việc cho Ipython, nhưng một biến thể nhỏ trên giải pháp của @Mike-Desimone đã thực hiện công việc: thay vì chấm dứt dòng với việc trả lại vận chuyển, hãy bắt đầu dòng trở lại vận chuyển:IPython, but a slight variation on @Mike-Desimone's solution did the job: instead of terminating the line with the carriage return, start the line with the carriage return:
from __future__ import print_function
for x in range[10]:
print[x, end='\r']
print[]
8Ngoài ra, phương pháp này không yêu cầu câu lệnh in thứ hai.
Đã trả lời ngày 22 tháng 4 năm 2015 lúc 22:22Apr 22, 2015 at 22:22
David Marxdavid MarxDavid Marx
7,8143 huy hiệu vàng41 Huy hiệu bạc62 Huy hiệu đồng3 gold badges41 silver badges62 bronze badges
3
Câu trả lời được chấp nhận là không hoàn hảo. Dòng được in đầu tiên sẽ ở đó và nếu bản in thứ hai của bạn không bao gồm toàn bộ dòng mới, bạn sẽ kết thúc bằng văn bản rác.
Để minh họa vấn đề, hãy lưu mã này dưới dạng tập lệnh và chạy nó [hoặc chỉ xem xét]:
from __future__ import print_function
for x in range[10]:
print[x, end='\r']
print[]
9Đầu ra sẽ trông giống như thế này:
for x in range[10]:
print '{}\r'.format[x],
print
0Điều làm việc cho tôi là xóa dòng trước khi để lại một bản in vĩnh viễn. Vui lòng điều chỉnh vấn đề cụ thể của bạn:
for x in range[10]:
print '{}\r'.format[x],
print
1Và bây giờ nó in như mong đợi:
for x in range[10]:
print '{}\r'.format[x],
print
2Đã trả lời ngày 17 tháng 7 năm 2018 lúc 20:48Jul 17, 2018 at 20:48
Mimoraleamimoraleamimoralea
9.2197 Huy hiệu vàng55 Huy hiệu bạc55 Huy hiệu Đồng7 gold badges55 silver badges55 bronze badges
Tôi hơi ngạc nhiên khi không ai sử dụng ký tự backspace. Đây là một cái sử dụng nó.
for x in range[10]:
print '{}\r'.format[x],
print
3Đã trả lời ngày 6 tháng 2 năm 2018 lúc 20:09Feb 6, 2018 at 20:09
1
Đây là giải pháp của tôi! Windows 10, Python 3.7.1
Tôi không chắc tại sao mã này hoạt động, nhưng nó hoàn toàn xóa dòng ban đầu. Tôi đã tổng hợp nó từ các câu trả lời trước đó. Các câu trả lời khác sẽ chỉ đưa dòng trở lại từ đầu, nhưng nếu bạn có một dòng ngắn hơn sau đó, nó sẽ trông lộn xộn như
for x in range[75]:
print['*' * [75 - x], x, end='\x1b[1K\r']
print[]
2 biến thành for x in range[75]:
print['*' * [75 - x], x, end='\x1b[1K\r']
print[]
9.for x in range[10]:
print '{}\r'.format[x],
print
4Đầu ra - Mỗi dòng sẽ được viết lại mà không có bất kỳ văn bản cũ nào hiển thị:
for x in range[10]:
print '{}\r'.format[x],
print
5Dòng tiếp theo [viết lại hoàn toàn trên cùng một dòng]:
for x in range[10]:
print '{}\r'.format[x],
print
6Đã trả lời ngày 19 tháng 12 năm 2018 lúc 1:12Dec 19, 2018 at 1:12
[Python3] Đây là những gì làm việc cho tôi. Nếu bạn chỉ sử dụng \ 010 thì nó sẽ để lại các ký tự, vì vậy tôi đã điều chỉnh nó một chút để đảm bảo rằng nó ghi đè lên những gì đã ở đó. Điều này cũng cho phép bạn có một cái gì đó trước mục in đầu tiên và chỉ xóa chiều dài của mục.
for x in range[10]:
print '{}\r'.format[x],
print
7Đã trả lời ngày 8 tháng 8 năm 2019 lúc 0:53Aug 8, 2019 at 0:53
Thêm một câu trả lời dựa trên các câu trả lời trước.
Nội dung của pbar.py: nhập sys, showil, datetime
for x in range[10]:
print '{}\r'.format[x],
print
8Việc sử dụng kịch bản:
for x in range[10]:
print '{}\r'.format[x],
print
9Đã trả lời ngày 8 tháng 10 năm 2019 lúc 12:12Oct 8, 2019 at 12:12
KriszkriszKrisz
6716 Huy hiệu bạc21 Huy hiệu đồng6 silver badges21 bronze badges
Tốt hơn để ghi đè toàn bộ dòng nếu không dòng mới sẽ trộn với các dòng cũ nếu dòng mới ngắn hơn.
for x in range[10]:
print '{0}\r'.format[x],
print
0Phải sử dụng
for x in range[10]:
print["Progress {:2.1%}".format[x / 10], end="\r"]
0 trên Windows.Đã trả lời ngày 12 tháng 8 năm 2020 lúc 11:24Aug 12, 2020 at 11:24
Điều này làm việc cho tôi, sử dụng Python 3.7.9 trong Spyder, trong Windows:
for x in range[10]:
print '{0}\r'.format[x],
print
1Đã trả lời ngày 1 tháng 4 năm 2021 lúc 23:04Apr 1, 2021 at 23:04
Dù sao nếu ai đó muốn in ấn [rõ ràng] một số đường được in trước đó trong stdout, thì câu trả lời này sẽ hữu ích cho anh ta. [Cảm ơn Thijmen Dam vì bài viết hay ghi đè các dòng được in trước đó]many lines previously printed in stdout, than this answer should be helpful for him. [Thanks Thijmen Dam for the nice article Overwrite Previously Printed Lines]
Trong bảng điều khiển ANSI, bạn có thể sử dụng các chuỗi đặc biệt:
for x in range[10]:
print["Progress {:2.1%}".format[x / 10], end="\r"]
1 và for x in range[10]:
print["Progress {:2.1%}".format[x / 10], end="\r"]
2Đầu tiên trong số họ nâng một con trỏ, thứ hai - xóa hoàn toàn một dòng.
Ví dụ về việc thanh toán bù trừ một bàn điều khiển [Python 3]:
for x in range[10]:
print '{0}\r'.format[x],
print
2hoặc cuối cùng chỉ đơn giản [sẽ xóa màn hình và di chuyển con trỏ đến 0,0]:
for x in range[10]:
print '{0}\r'.format[x],
print
3Nếu bạn chỉ muốn định vị con trỏ, thì hãy sử dụng điều này:
for x in range[10]:
print '{0}\r'.format[x],
print
4trong đó
for x in range[10]:
print["Progress {:2.1%}".format[x / 10], end="\r"]
3 và for x in range[10]:
print["Progress {:2.1%}".format[x / 10], end="\r"]
4 là dòng và cột tương ứng.Tài liệu tham khảo cho bạn trình tự thoát ANSI
Đã trả lời ngày 5 tháng 5 lúc 22:16May 5 at 22:16
Yan Pakyan PakYan Pak
1.6772 Huy hiệu vàng19 Huy hiệu bạc13 Huy hiệu đồng2 gold badges19 silver badges13 bronze badges