麻烦做一个很好的ftp检查python程序

时间:2013-02-20 06:19:35

标签: python datetime ftp uploading downloading

请耐心等待。它只用了一周我开始使用python。下面是问题:我想连接到FTP服务器。假设我的ftp和本地目录上的文件结构是相同的。我希望我的python程序执行以下操作:

1>在运行程序时,它应该上传所有不在服务器上但在我的服务器上的文件 本地(仅上传丢失的文件 - 不替换全部)。 比如,我添加了一个新目录或一个新文件,它应该按原样上传到服务器上。 2 - ;然后,它应该检查本地和服务器上的文件的修改时间,并通知哪个是最新的。

不,我制作了两个节目:

1>一个将所有文件从本地上传到服务器的程序。我宁愿它检查丢失的文件然后uipload只是丢失的文件文件夹。不要全部替换。 2 - ;第二个程序将使用os.walk列出本地的所有文件,它将上传服务器上的所有文件,而不会创建正确的目录结构。  全部都被复制到服务器的根目录。然后它还检查修改的时间。

我现在正试图将这两个模块加入到一个完美的中,这就是我想要的所有内容。任何能够真正看到这些代码并尝试将它们加入我想做的事情的人都将是完美的。抱歉这是一种痛苦!!

PS:我可能没有轻松完成所有事情!!

代码1:

import sys

from ftplib import FTP

import os

def uploadDir(localdir,ftp):

    """

    for each directory in an entire tree

    upload simple files, recur into subdirectories

    """

    localfiles = os.listdir(localdir)

    for localname in localfiles:

        localpath = os.path.join(localdir, localname)


        print ('uploading', localpath, 'to', localname)
        if not os.path.isdir(localpath):

            os.chdir(localdir)


            ftp.storbinary('STOR '+localname, open(localname, 'rb'))



        else:

            try:

                ftp.mkd(localname)

                print ('directory created')

            except:

                print ('directory not created')

            ftp.cwd(localname)             # change remote dir

            uploadDir(localpath,ftp)                  # upload local subdir

            ftp.cwd('..')                  # change back up

            print ('directory exited')


def Connect(path):
  ftp = FTP("127.0.0.1")
  print ('Logging in.')
  ftp.login('User', 'Pass')
  uploadDir(path,ftp)


Connect("C:\\temp\\NVIDIA\\Test")

代码2:

import os,pytz,smtplib
import time
from ftplib import FTP
from datetime import datetime,timedelta
from email.mime.text import MIMEText



def Connect_FTP(fileName,pathToFile):                       path from the local path
(dir,file) = os.path.split(fileName)

fo = open("D:\log.txt", "a+")                        # LOgging Important Events
os.chdir(dir)
ftp = FTP("127.0.0.1")
print ('Logging in.')
ftp.login('User', 'Pass')
l=dir.split(pathToFile)
print(l[1])

if file in ftp.nlst():                                          
print("file2Check:"+file)
    fo.write(str(datetime.now())+":  File is in the Server. Checking the Versions....\n")
    Check_Latest(file,fileName,ftp,fo)
else:
    print("File is not on the Server. So it is being uploaded!!!")
    fo.write(str(datetime.now())+":  File is NOT in the Server. It is being Uploaded NOW\n")
    ftp.storbinary('STOR '+file, open(file, 'rb'))


print("The End")


def Check_Latest(file2,path_on_local,ftp,fo):                               # Function to check the latest file, USING the "MOdified TIme"
LOcalFile = os.path.getmtime(path_on_local)
dloc=datetime.fromtimestamp(LOcalFile).strftime("%d %m %Y %H:%M:%S")
print("Local File:"+dloc)
localTimestamp=str(time.mktime(datetime.strptime(dloc, "%d %m %Y %H:%M:%S").timetuple())) # Timestamp to compare LOcalTime


modifiedTime = ftp.sendcmd('MDTM '+file2)                             # Using MDTM command to get the MOdified time.
IST = pytz.timezone('Asia/Kolkata')
ServTime=datetime.strptime(modifiedTime[4:], "%Y%m%d%H%M%S")

tz = pytz.timezone("UTC")
ServTime = tz.localize(ServTime)
j=str(ServTime.astimezone(IST))                                       # Changing TimeZone
g=datetime.strptime(j[:-6],"%Y-%m-%d %H:%M:%S")
ServerTime = g.strftime('%d %m %Y %H:%M:%S')
serverTimestamp=str(time.mktime(datetime.strptime(ServerTime, "%d %m %Y %H:%M:%S").timetuple())) # Timestamp to compare Servertime

print("ServerFile:"+ServerTime)

if serverTimestamp > localTimestamp:
  print ("Old Version on The Client. You need to update your copy of the file")
  fo.write(str(datetime.now())+":  Old Version of the file "+file2+" on the Client\n")
  return
else:
  print ("The File on the Server is Outdated!!!New COpy Uploaded")
  fo.write(str(datetime.now())+": The server has an outdated file: "+file2+". An email is being generated\n")
  ftp.storbinary('STOR '+file2, open(file2, 'rb'))

def Connect(pathToFile):

for path, subdirs, files in os.walk(pathToFile):
 for name in files:
    j=os.path.join(path, name)
    print(j)
    Connect_FTP(j,pathToFile)

连接( “C:\ TEMP \ NVIDIA \测试”)

1 个答案:

答案 0 :(得分:0)

可能会this script有用。