在python

时间:2017-07-08 22:33:21

标签: python ftp

所以我正在编写一个脚本,以递归方式搜索文件夹以获取.mkv文件并将其上传到我的NAS。我有脚本工作,但我看不到进展。我导入了我在github上找到的progressbar,并且能够使用该演示来查看它的工作情况。这是我想要的,但它们包含的FTP示例是从服务器检索文件。我需要上传。

如何按时间间隔获取上传的金额,以便我可以对进度条运行更新?

Bellow是我用于上传的代码

import os
import ftplib
import ntpath

ntpath.basename("a/b/c")

def path_leaf(path):
head, tail = ntpath.split(path)
return tail or ntpath.basename(head)

from glob import glob
FileTransferList = [y for x in os.walk('/tmp/rippedMovies') for y in glob(os.path.join(x[0], '*.mkv'))]

global ftp

def FTP_GLOB_transfer(URL, UserName, Password):
    ftp = ftplib.FTP(URL, UserName, Password)   # connect to host, default port
    print URL, UserName, Password
    for file in FileTransferList:
        FileName = path_leaf(file)
        print file
        TheFile = open(file, 'r')
        ftp.storbinary('STOR ' + FileName, TheFile, 1024)
        TheFile.close()
    ftp.quit()
    ftp = None

FTP_GLOB_transfer('<IP>', '<USER>', '<PASSWORD>')

1 个答案:

答案 0 :(得分:4)

我明白了。我决定使用TQDM,因为我发现了一些更容易阅读的文档。我假设storbinary()必须有回报或者告诉它进展的东西,只是不知道我在寻找回调。

无论如何我添加了一个新的导入from tqdm import tqdm

我添加了此filesize = os.path.getsize(file)以获取文件的文件大小

然后我用此代码替换了ftp.storbinary('STOR ' + FileName, TheFile, 1024)

with tqdm(unit = 'blocks', unit_scale = True, leave = False, miniters = 1, desc = 'Uploading......', total = filesize) as tqdm_instance:
        ftp.storbinary('STOR ' + FileName, TheFile, 2048, callback = lambda sent: tqdm_instance.update(len(sent)))

总的来说,新的工作代码看起来像

import os
import ftplib
import ntpath
from tqdm import tqdm

ntpath.basename("a/b/c")

def path_leaf(path):
    head, tail = ntpath.split(path)
    return tail or ntpath.basename(head)

from glob import glob
FileTransferList = [y for x in os.walk('/tmp/rippedMovies') for y in glob(os.path.join(x[0], '*.mkv'))]

global ftp

def FTP_GLOB_transfer(URL, UserName, Password):
    ftp = ftplib.FTP(URL, UserName, Password)   # connect to host, default port
    print URL, UserName, Password
    for file in FileTransferList:
        FileName = path_leaf(file)
        filesize = os.path.getsize(file)
        print file
        TheFile = open(file, 'r')
        with tqdm(unit = 'blocks', unit_scale = True, leave = False, miniters = 1, desc = 'Uploading......', total = filesize) as tqdm_instance:
            ftp.storbinary('STOR ' + FileName, TheFile, 2048, callback = lambda sent: tqdm_instance.update(len(sent)))
        TheFile.close()
    ftp.quit()
    ftp = None

现在输出为

/tmp/rippedMovies/TestMovie.mkv
Uploading......:  51%|████████████████████▉                    | 547M/1.07G 
[00:05<00:14, 36.8Mblocks/s]