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
1 của bạn.4 gold badges69 silver badges89 bronze badges1784 KB / KB 1829 downloaded!
1788 KB / KB 1829 downloaded!
etc...
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]
111K4 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