Hướng dẫn how do i print a previous line in python? - làm cách nào để in một dòng trước đó trong python?
Tóm tắt: Cách đơn giản nhất để ghi đè lên bản in trước đó thành stdout là đặt ký tự trả về vận chuyển ( Show
Xây dựng vấn đềĐịnh nghĩa vấn đề: Làm thế nào bạn sẽ ghi đè lên bản in/đầu ra trước đó thành stdout trong Python?How will you overwrite the previous print/output to stdout in Python? Ví dụ: Hãy nói rằng bạn có đoạn trích sau đây, in đầu ra như hình dưới đây:Let’s say you have the following snippet, which prints the output as shown below: import time for i in range(10): if i % 2 == 0: print(i) time.sleep(2) Output: Thử thách: Những gì chúng tôi muốn làm là thay vì in từng đầu ra trong một dòng mới, chúng tôi muốn thay thế giá trị đầu ra trước đó và ghi đè lên giá trị đầu ra mới trên cùng một dòng, như được hiển thị bên dưới.What we want to do is instead of printing each output in a newline, we want to replace the previous output value and overwrite it with the new output value on the same line, as shown below. Đầu ra mong đợiVideo hướng dẫnLàm thế nào để ghi đè lên bản in trước đó cho Stdout trong Python? 📍reCommed đọc: [Đã sửa lỗi] trở lại vận chuyển không hoạt động với in trong mã vsRecommended Read: [FIXED] Carriage return Not Working with Print in VS Code Phương pháp 1: Sử dụng ký tự Return Return (‘\ r,)Cách tiếp cận: Giải pháp đơn giản nhất cho vấn đề đã cho là sử dụng ký tự trả về vận chuyển (‘ 📌note: Đọc ở đây để tìm hiểu thêm về nhân vật thoát trở lại vận chuyển.Note: Read here to learn more about the carriage return escape character. Code: import time for i in range(10): if i % 2 == 0: print(i, end="\r") time.sleep(2) Output: Điều đó dễ dàng! Có phải là nó không? Thật không may, cách tiếp cận này không hoàn toàn không thể ngu ngốc. Hãy để xem những gì xảy ra khi chúng ta thực hiện đoạn trích sau: import time li = ['start', 'Processing result'] for i in range(len(li)): print(li[i], end='\r') time.sleep(2) print('Terminate') Output: ⚠ ________ 10 không thể xóa hoàn toàn đầu ra trước đó. Do đó, đầu ra cuối cùng là sai. Vì chúng tôi đang thực hiện từng đầu ra được tạo bởi một câu lệnh in trên đầu ra trước đó, nên không thể hiển thị đầu ra đúng cách trên cùng một dòng nếu đầu ra sau có độ dài ngắn hơn đầu ra trước đó.on top of the previous output, it is not possible to display an output properly on the same line if the following output has a shorter length than the output before. Khắc phục: Để khắc phục sự cố trên, thay vì chỉ cần ghi đè đầu ra, chúng ta phải xóa đầu ra trước đó trước khi hiển thị đầu ra tiếp theo. Điều này có thể được thực hiện với sự trợ giúp của chuỗi ANSI sau: Hồi \ x1b [2K.To fix the above problem, instead of simply overwriting the output, we must clear the previous output before displaying the next output. This can be done with the help of the following ANSI sequence: “\x1b[2K“. Code: import time li = ['start', 'Processing result'] for i in range(len(li)): print(li[i], end='\r') time.sleep(2) print(end='\x1b[2K') # ANSI sequence to clear the line where the cursor is located print('Terminate') Output: Phương pháp 2: Dòng rõ và in bằng trình tự thoát ANSICách tiếp cận: Ý tưởng ở đây là sử dụng một câu lệnh in thêm thay vì thay đổi tham số import time for i in range(10): if i % 2 == 0: print(i, end="\r") time.sleep(2)1 parameter of the print statement that is used to display the output. The extra print statement is used to move the cursor back to the previous line where the output was printed and then clear it out with the help of ANSI escape sequences. Explanation:
Code: import time UP = '\033[1A' CLEAR = '\x1b[2K' for i in range(10): if i % 2 == 0: print(i) time.sleep(2) print(UP, end=CLEAR) Output: Thảo luận: Mặc dù mã này có thể trông phức tạp hơn một chút so với cách tiếp cận trước đó, nhưng nó đi kèm với một lợi thế lớn của sự gọn gàng của đầu ra. Bạn không phải lo lắng về độ dài của đầu ra trước đó. Ngoài ra, con trỏ không trực quan cản trở đầu ra được hiển thị.Though this code might look a little more complex than the previous approach, it comes with a major advantage of the neatness of output. You don’t have to worry about the length of the previous output. Also, the cursor does not visually hinder the output being displayed. Ở đây, một hướng dẫn tiện dụng để thoát khỏi các chuỗi liên quan đến các chuyển động con trỏ:
Phương pháp 3: Sử dụng nhân vật \ \ b ”Một cách khác để ghi đè dòng đầu ra trước đó là sử dụng ký tự backspace (\ \ b,) và ghi vào đầu ra tiêu chuẩn.\b“) and write to the standard output. Code: import time import sys for i in range(10): if i % 2 == 0: sys.stdout.write(str(i)) time.sleep(1) sys.stdout.write('\b') sys.stdout.flush() Output: THẬN TRỌNG: Đảm bảo rằng bạn xả đúng bộ đệm như được thực hiện trong đoạn trích trên. Nếu không, bạn có thể thấy rằng chỉ có kết quả cuối cùng được hiển thị ở cuối tập lệnh.Ensure that you properly flush the buffer as done in the above snippet. Otherwise, you might see that only the last result is displayed at the end of the script. Tiền thưởng đọc trước 👇 Vận chuyển trở lại (\ r) trong Python là gì?Nói một cách đơn giản, vận chuyển trở lại là một nhân vật trốn thoát giống như import time for i in range(10): if i % 2 == 0: print(i, end="\r") time.sleep(2)2. Trả về vận chuyển được ký hiệu là \r và về cơ bản nó được sử dụng để chuyển con trỏ sang đầu một dòng hoặc chuỗi thay vì cho phép nó chuyển sang dòng tiếp theo.carriage return is an escape character just like import time for i in range(10): if i % 2 == 0: print(i, end="\r") time.sleep(2)2. Carriage return is denoted as \r and it is basically used to shift the cursor to the beginning of a
line or string instead of allowing it to move on to the next line.Bất cứ khi nào bạn sử dụng ký tự thoát trở lại vận chuyển '\ r', nội dung xuất hiện sau khi \ r sẽ xuất hiện trên đầu dòng của bạn và sẽ tiếp tục thay thế các ký tự của chuỗi trước đó cho đến khi nó chiếm tất cả các nội dung còn lại sau Example: li = ['One', 'Two', 'Three'] for i in range(len(li)): print(li[i], end='\r') # OUTPUT-->Three Sự kết luậnĐể tổng hợp mọi thứ, cách dễ nhất để ghi đè lên bản in trước đó là sử dụng ký tự trả về vận chuyển import time for i in range(10): if i % 2 == 0: print(i, end="\r") time.sleep(2)6. Tôi hy vọng hướng dẫn này đã giúp bạn. Ở đây, một cách thú vị khác đọc mà bạn có thể thấy hữu ích: Python in một danh sách dòngPython Print One Line List
Tôi là một blogger Python chuyên nghiệp và người tạo nội dung. Tôi đã xuất bản nhiều bài báo và tạo ra các khóa học trong một khoảng thời gian. Hiện tại tôi đang làm việc như một freelancer toàn thời gian và tôi có kinh nghiệm trong các lĩnh vực như Python, AWS, DevOps và Mạng. Bạn có thể liên lạc với tôi @: Upwork LinkedIn Làm cách nào để quay lại một dòng trong bảng điều khiển Python?Bạn có thể cố gắng sử dụng '\ 033 [1a' để quay lại một dòng (thay thế 1 bằng số dòng để nhảy.\033[1A' to go back one line (substitute 1 with number of lines to jump.
Làm thế nào để bạn in trên các dòng khác nhau trong Python?Tóm tắt, ký tự dòng mới trong Python là \ n.Nó được sử dụng để chỉ ra sự kết thúc của một dòng văn bản.Bạn có thể in các chuỗi mà không cần thêm một dòng mới có kết thúc =, đó là ký tự sẽ được sử dụng để tách các dòng.end =
Kết thúc \ r làm gì trong Python?Về mặt khái niệm, \ r di chuyển con trỏ sang đầu dòng và sau đó tiếp tục xuất các ký tự như bình thường.Bạn cũng cần nói rằng in không tự động đặt một ký tự mới ở cuối chuỗi.Trong python3, bạn có thể sử dụng end = "" như trong câu trả lời stackoverflow trước đó.moves the cursor to the beginning of the line and then keeps outputting characters as normal. You also need to tell print not to automatically put a newline character at the end of the string. In python3, you can use end="" as in this previous stackoverflow answer. |