Hướng dẫn python print overwrite same line - bản in python ghi đè lên cùng một dòng

Tôi đang viết một trình tải xuống FTP. Một phần của mã là một cái gì đó như thế này:

ftp.retrbinary["RETR " + file_name, process]

Tôi đang gọi quy trình chức năng để xử lý cuộc gọi lại:

def process[data]:
    print os.path.getsize[file_name]/1024, 'KB / ', size, 'KB downloaded!'
    file.write[data]

Và đầu ra là một cái gì đó như thế này:

1784  KB / KB 1829 downloaded!
1788  KB / KB 1829 downloaded!
etc...   

Nhưng tôi muốn nó in dòng này và lần sau khi tái bản/làm mới nó để nó chỉ hiển thị nó một lần và tôi sẽ thấy tiến trình tải xuống đó.

Nó được hoàn thiện bằng cách nào?

Jonrsharpe

Huy hiệu vàng 111K2525 gold badges217 silver badges403 bronze badges

hỏi ngày 4 tháng 2 năm 2011 lúc 11:13Feb 4, 2011 at 11:13

2

Đây là mã cho Python 3.x:

print[os.path.getsize[file_name]/1024+'KB / '+size+' KB downloaded!', end='\r']

Từ khóa

def process[data]:
    print os.path.getsize[file_name]/1024, 'KB / ', size, 'KB downloaded!'
    file.write[data]
3 là công việc ở đây - theo mặc định,
def process[data]:
    print os.path.getsize[file_name]/1024, 'KB / ', size, 'KB downloaded!'
    file.write[data]
4 kết thúc bằng ký tự dòng mới [
def process[data]:
    print os.path.getsize[file_name]/1024, 'KB / ', size, 'KB downloaded!'
    file.write[data]
5], nhưng điều này có thể được thay thế bằng một chuỗi khác. Trong trường hợp này, kết thúc đường dây với một xe ngựa trở lại thay vào đó trả lại con trỏ để bắt đầu dòng hiện tại. Do đó, không cần phải nhập mô -đun
def process[data]:
    print os.path.getsize[file_name]/1024, 'KB / ', size, 'KB downloaded!'
    file.write[data]
6 cho loại cách sử dụng đơn giản này.
def process[data]:
    print os.path.getsize[file_name]/1024, 'KB / ', size, 'KB downloaded!'
    file.write[data]
4 Thực sự có một số đối số từ khóa có thể được sử dụng để đơn giản hóa rất nhiều mã.

Để sử dụng cùng một mã trên Python 2.6+, hãy đặt dòng sau ở đầu tệp:

from __future__ import print_function

Tshepang

11.7K21 Huy hiệu vàng90 Huy hiệu bạc134 Huy hiệu đồng21 gold badges90 silver badges134 bronze badges

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

KudzukudzuKudzu

3.1101 Huy hiệu vàng17 Huy hiệu bạc16 Huy hiệu đồng1 gold badge17 silver badges16 bronze badges

9

Nếu tất cả những gì bạn muốn làm là thay đổi một dòng, hãy sử dụng

def process[data]:
    print os.path.getsize[file_name]/1024, 'KB / ', size, 'KB downloaded!'
    file.write[data]
8.
def process[data]:
    print os.path.getsize[file_name]/1024, 'KB / ', size, 'KB downloaded!'
    file.write[data]
8 có nghĩa là trả lại vận chuyển. Hiệu ứng của nó chỉ là đưa Caret trở lại khi bắt đầu dòng hiện tại. Nó không xóa bất cứ điều gì. Tương tự,
1784  KB / KB 1829 downloaded!
1788  KB / KB 1829 downloaded!
etc...   
0 có thể được sử dụng để đi ngược lại một ký tự. [Một số thiết bị đầu cuối có thể không hỗ trợ tất cả các tính năng đó]

import sys

def process[data]:
    size_str = os.path.getsize[file_name]/1024, 'KB / ', size, 'KB downloaded!'
    sys.stdout.write['%s\r' % size_str]
    sys.stdout.flush[]
    file.write[data]

Jeff

11.8k10 Huy hiệu vàng46 Huy hiệu bạc87 Huy hiệu đồng10 gold badges46 silver badges87 bronze badges

Đã trả lời ngày 4 tháng 2 năm 2011 lúc 11:17Feb 4, 2011 at 11:17

Sam Dolansam DolanSam Dolan

31.4K9 Huy hiệu vàng85 Huy hiệu bạc84 Huy hiệu đồng9 gold badges85 silver badges84 bronze badges

4

Hãy xem tài liệu mô -đun Curses và mô -đun Curses Howto.

Ví dụ thực sự cơ bản:

import time
import curses

stdscr = curses.initscr[]

stdscr.addstr[0, 0, "Hello"]
stdscr.refresh[]

time.sleep[1]

stdscr.addstr[0, 0, "World! [with curses]"]
stdscr.refresh[]

Đã trả lời ngày 4 tháng 2 năm 2011 lúc 11:17Feb 4, 2011 at 11:17

6

Sam Dolansam Dolan

import re, sys

class Reprinter:
    def __init__[self]:
        self.text = ''

    def moveup[self, lines]:
        for _ in range[lines]:
            sys.stdout.write["\x1b[A"]

    def reprint[self, text]:
        # Clear previous text by overwritig non-spaces with spaces
        self.moveup[self.text.count["\n"]]
        sys.stdout.write[re.sub[r"[^\s]", " ", self.text]]

        # Print new text
        lines = min[self.text.count["\n"], text.count["\n"]]
        self.moveup[lines]
        sys.stdout.write[text]
        self.text = text

reprinter = Reprinter[]

reprinter.reprint["Foobar\nBazbar"]
reprinter.reprint["Foo\nbar"]

31.4K9 Huy hiệu vàng85 Huy hiệu bạc84 Huy hiệu đồngMar 23, 2013 at 11:07

1

Hãy xem tài liệu mô -đun Curses và mô -đun Curses Howto.end='\r' to the print function, test this example:

import time
for j in range[1,5]:
   print['waiting : '+j, end='\r']
   time.sleep[1]

Ví dụ thực sự cơ bản:Aug 16, 2019 at 8:52

1

Đây là lớp học nhỏ của tôi có thể in lại các khối văn bản. Nó xóa đúng văn bản trước đó để bạn có thể ghi đè văn bản cũ của mình bằng văn bản mới ngắn hơn mà không tạo ra một mớ hỗn độn.

print os.path.getsize[file_name]/1024, 'KB / ', size, 'KB downloaded!\r',

Đã trả lời ngày 23 tháng 3 năm 2013 lúc 11:07

Để vượt qua dòng trước đó trong Python All Wath bạn cần là thêm end = '\ r' vào chức năng in, hãy kiểm tra ví dụ này:Apr 26, 2014 at 22:10

Đã trả lời ngày 16 tháng 8 năm 2019 lúc 8:52Matt Ellen

Tôi thấy rằng đối với một câu lệnh in đơn giản trong Python 2.7, chỉ cần đặt dấu phẩy vào cuối sau

1784  KB / KB 1829 downloaded!
1788  KB / KB 1829 downloaded!
etc...   
1 của bạn.4 gold badges69 silver badges89 bronze badges

1

Điều này ngắn hơn so với các giải pháp không Python 3 khác, nhưng cũng khó duy trì hơn.

def process[data]:
    print os.path.getsize[file_name]/1024, 'KB / ', size, 'KB downloaded!'
    file.write[data]
0

Đã trả lời ngày 26 tháng 4 năm 2014 lúc 22:10Oct 29, 2018 at 17:37

Matt Ellenmatt Ellen

def process[data]:
    print os.path.getsize[file_name]/1024, 'KB / ', size, 'KB downloaded!'
    file.write[data]
1

11K4 Huy hiệu vàng69 Huy hiệu bạc89 Huy hiệu đồngNov 19, 2014 at 17:40

2

Tôi đang sử dụng Spyder 3.3.1 - Windows 7 - Python 3.6 mặc dù có thể không cần thiết. Dựa trên bài đăng này - //github.com/spyder-ide/spyder/issues/3437

def process[data]:
    print os.path.getsize[file_name]/1024, 'KB / ', size, 'KB downloaded!'
    file.write[data]
2

Làm thế nào để bạn ghi đè một dòng in 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 ['\ r'] trong câu lệnh in dưới dạng in [chuỗi, end = "\ r"]. Điều này trả lại dòng stdout tiếp theo cho đầu dòng mà không cần tiến hành dòng tiếp theo.set the carriage return [ '\r' ] character within the print statement as print[string, end = "\r"] . This returns the next stdout line to the beginning of the line without proceeding to the next line.

Làm thế nào để bạn in lại trên cùng một dòng trong Python?

Để in trên cùng một dòng trong Python, thêm một đối số thứ hai, end = '', vào lệnh gọi hàm in [].add a second argument, end=' ', to the print[] function call.

'\ R làm gì trong Python?

Trong các chuỗi Python, dấu gạch chéo ngược "\" là một nhân vật đặc biệt, còn được gọi là nhân vật "Escape".Nó được sử dụng để thể hiện các ký tự khoảng trắng nhất định: "\ t" là một tab, "\ n" là một dòng mới và "\ r" là một sự trở lại vận chuyển.carriage return.

Làm thế nào để bạn ghi đè một bản in?

Phương pháp 1: Quay trở lại vận chuyển..
Đường in, nhưng kết thúc bằng một lần trở lại vận chuyển thay vì một ký tự mới.Điều này di chuyển con trỏ trở lại đầu dòng in ..
In một dòng khác, nhưng vì con trỏ hiện đang ở đầu dòng trước đó, đầu ra mới sẽ được in trên đầu dòng trước ..

Bài Viết Liên Quan

Chủ Đề