使用Python将文件从一个FTP位置传输到另一个FTP位置

时间:2014-09-30 23:07:57

标签: python ftp file-transfer ftplib

我正在尝试执行在两个不同FTP位置之间传输文件的任务。简单的目标是,我希望使用Python脚本在过去几个小时内从FTP位置A到FTP位置B的特定文件类型。

我正在使用ftplib来执行任务并将代码放在一起。

到目前为止,文件传输对于from_sock变量中定义的单个文件工作正常,但是当我想循环遍历最近2小时内创建的所有文件并复制它时,我正在遇到障碍。因此我编写的脚本基本上是复制单个文件,但我想要移动所有文件,并使用在最近2小时内创建的特定扩展名示例* .jpg。我厌倦了使用MDTM来查找文件修改时间,但我无法以正确的方式实现。

非常感谢任何帮助。以下是当前代码:

import ftplib
srcFTP = ftplib.FTP("test.com", "username", "pass")
srcFTP.cwd("/somefolder")
desFTP = ftplib.FTP("test2.com", "username", "pass")
desFTP.cwd("/")
from_Sock = srcFTP.transfercmd("RETR Test1.text")
to_Sock = desFTP.transfercmd("STOR test1.text")
state = 0
while 1:
    block = from_Sock.recv(1024)
    if len(block) == 0:
        break
    state += len(block)
    while len(block) > 0:
        sentlen = to_Sock.send(block)
        block = block[sentlen:]     
print state, "Total Bytes Transferred"
from_Sock.close()
to_Sock.close()
srcFTP.quit()
desFTP.quit()

谢谢, DD

1 个答案:

答案 0 :(得分:1)

这是一个简短的代码,它通过ftp获取路径并上传扩展名为.jpg的每个文件。它不完全是你想要的,但我偶然发现你的答案,这可能会帮助你。

import os
from ftplib import FTP

def ftpPush(filepathSource, filename, filepathDestination):
    ftp = FTP(IP, username, password)
    ftp.cwd(filepathDestination)

    ftp.storlines("STOR "+filename, open(filepathSource+filename, 'r')) 
    ftp.quit()

path = '/some/path/'
for fileName in os.listdir(path):
    if fileName.endswith(".jpg"):
        ftpPush(filepathSource=path, filename=fileName, filepathDestination='/some/destination/')

可以使用this example在ftp服务器上检查文件的创建时间。

fileName = "nameOfFile.txt"
modifiedTime = ftp.sendcmd('MDTM ' + fileName)
# successful response: '213 20120222090254'
ftp.quit()

现在您只需要检查已修改的文件的时间,如果它低于您希望的阈值,请下载它,然后将它们上传到另一台计算机。