Python ftplib:显示FTP上传进度

我使用Python 3.4上传了一个带有FTP的大文件。

我希望能够在上传文件时显示进度百分比。 这是我的代码:

from ftplib import FTP
import os.path

# Init
sizeWritten = 0
totalSize = os.path.getsize('test.zip')
print('Total file size : ' + str(round(totalSize / 1024 / 1024 ,1)) + ' Mb')

# Define a handle to print the percentage uploaded
def handle(block):
    sizeWritten += 1024 # this line fail because sizeWritten is not initialized.
    percentComplete = sizeWritten / totalSize
    print(str(percentComplete) + " percent complete")

# Open FTP connection
ftp = FTP('website.com')
ftp.login('user','password')

# Open the file and upload it
file = open('test.zip', 'rb')
ftp.storbinary('STOR test.zip', file, 1024, handle)

# Close the connection and the file
ftp.quit()
file.close()

如何获得已经在句柄函数中读取的块的数量?

更新

读完cmd的回答后,我将其添加到我的代码中:

class FtpUploadTracker:
    sizeWritten = 0
    totalSize = 0
    lastShownPercent = 0

    def __init__(self, totalSize):
        self.totalSize = totalSize

    def handle(self, block):
        self.sizeWritten += 1024
        percentComplete = round((self.sizeWritten / self.totalSize) * 100)

        if (self.lastShownPercent != percentComplete):
            self.lastShownPercent = percentComplete
            print(str(percentComplete) + " percent complete")

我打电话给这样的FTP上传:

uploadTracker = FtpUploadTracker(int(totalSize))
ftp.storbinary('STOR test.zip', file, 1024, uploadTracker.handle)

有三种我能想到的非哈希方式。 然后,所有这些变化的变量的“ownwership”:

  • 有传入的值并返回结果(基本上是指它存储在调用者中)
  • 具有全局值,并将其初始化为0和文件顶部。 (阅读global关键字)
  • 有这个功能作为一个类的成员函数来处理上传跟踪。 然后使sizeWritten成为sizeWritten一个实例变量。
  • 链接地址: http://www.djcxy.com/p/51117.html

    上一篇: Python ftplib: Show FTP upload progress

    下一篇: Fibonacci numbers with memoization runs slow in Python?