文件分类本地存取

# coding=utf-8
from __future__ import print_function
import paramiko
import time
import os


# init a sftp connection
def sftp_connect(ip, port, usr, pw):
    t = paramiko.Transport(ip, port)
    t.connect(username=usr, password=pw)
    sftp = paramiko.SFTPClient.from_transport(t)
    return sftp


def writefile(ftxt, content):
    with open(ftxt, 'w') as f:
        f.write(content)


def getdiferent(l1, l2):
    if l2 != l1:
        print ('get different')
        #f = open("D:Studypythonlogppemote.txt", 'r+')
        for x in l1:
            #f.write(x+"
")
            if x in l2:
                pass
            else:
                tmplist.append(x)
        #f.close()
        #f = open("D:Studypythonloglocal.txt", 'r+')
        for y in l2:
            #f.write(y+"
")
            if y in l1:
                pass
            else:
                tmplist.append(y)
        #f.close()
    else:
        pass
    return tmplist


def listdir(job_dir):
    dircontent = sftp1.listdir(job_dir)
    return dircontent


def waiteseconds(sec):
    for x in range(sec, 0, -1):
        print (x)
        time.sleep(1)


def classifylog(job_dir, list1, list2):
    print("remotelist and locallist is: ", len(list1), len(list2))
    # compare 2 lists and get the different
    different_list = getdiferent(list1, list2)
    print("different_list is :", different_list, len(different_list))

    if len(different_list) != 0:
        print ("list1 != list2")
        for j in range(0, len(different_list)):

            print ("---------------------------")
            casename = different_list[j]
            print ("case: ", casename)

            # new case folder
            os.chdir(localfolder + "\" + job_dir.split('/job')[1])
            localcase_list = os.listdir(localfolder + "\" + job_dir.split('/job')[1])
            if casename not in localcase_list:
                os.mkdir(casename)
            localfile = os.getcwd() + "\" + casename + "\" + "harness.log"

            # download log to local folder
            logdir = logfolder + "/" + casename
            try:
                sftp1.chdir(logdir)
                remotefile = sftp1.getcwd() + "/" + "harness.log"
                print ("remotefile: " + remotefile)
                sftp1.get(remotefile, localfile)
                print ("harness log download to localfile completed!")
            except IOError as e:
                print (e)
                print ("No log exists for this case:", casename)

    else:
        print ("list1 == list2")
        pass


if __name__ == '__main__':
    # init some vars
    tmplist = []
    remote_ip = "x.x.x.x"
    sftp_port = 21
    username = "username"
    password = "password"
    faileddir = "/home/username/job/failed"
    aborteddir = "/home/username/job/aborted"
    completedir = "/home/username/job/complete"
    localfolder = "D:Studypythonlog"
    logfolder = "/home/username/log"

    # new some folders in local disk
    os.chdir(localfolder)
    folder_list = os.listdir(localfolder)
    if "failed" not in folder_list:
        os.mkdir('failed')
    if "complete" not in folder_list:
        os.mkdir('complete')
    if "aborted" not in folder_list:
        os.mkdir('aborted')

    local_failed_dir = localfolder + "\" + "failed"
    local_complete_dir = localfolder + "\" + "complete"
    local_aborted_dir = localfolder + "\" + "aborted"

    # new a sftp connection
    print ("sftp connecting ... please wait...")
    sftp1 = sftp_connect(remote_ip, sftp_port, username, password)
    print ("sftp connection completed")

    # check the failed/aborted/complete folders
    remote_failed_list = listdir(faileddir)
    for i in range(0, len(remote_failed_list)):
        casename1 = remote_failed_list[i].split('.xml')[0]
        remote_failed_list[i] = casename1
    print ("remote_failed_list: ", len(remote_failed_list), remote_failed_list)

    remote_aborted_list = listdir(aborteddir)
    for i in range(0, len(remote_aborted_list)):
        casename2 = remote_aborted_list[i].split('.xml')[0]
        remote_aborted_list[i] = casename2
    print ("remote_aborted_list: ", len(remote_aborted_list), remote_aborted_list)

    remote_complete_list = listdir(completedir)
    for i in range(0, len(remote_complete_list)):
        casename3 = remote_complete_list[i].split('.xml')[0]
        remote_complete_list[i] = casename3
    print ("remote_complete_list: ", len(remote_complete_list), remote_complete_list)

    # check local failed/aborted/complete folders
    local_failed_list = os.listdir(local_failed_dir)
    print("local_failed_list: ", local_failed_list)
    local_aborted_list = os.listdir(local_aborted_dir)
    local_complete_list = os.listdir(local_complete_dir)

    # ==========classifylog==========
    print ("--------1 checking 'failed'------will start in 5 seconds------")
    waiteseconds(5)
    tmplist = []
    classifylog(faileddir, remote_failed_list, local_failed_list)
    local_failed_list = remote_failed_list
    print ("failed log check completed")

    print ("--------2 checking 'aborted'-----will start in 5 seconds---------")
    waiteseconds(5)
    tmplist = []
    classifylog(aborteddir, remote_aborted_list, local_aborted_list)
    local_aborted_list = remote_aborted_list
    print ("aborted log check completed")

    print ("--------3 checking 'complete'------will start in 5 seconds--------")
    waiteseconds(5)
    tmplist = []
    classifylog(completedir, remote_complete_list, local_complete_list)
    local_complete_list = remote_complete_list
    print ("complete log check completed")

    print ("close sftp connection")
    sftp1.close()

资料:

文件读写:http://www.cnblogs.com/ymjyqsx/p/6554817.html 

异常处理:http://www.cnblogs.com/Lival/p/6203111.html

os文件操作:http://www.jb51.net/article/59901.htm

原文地址:https://www.cnblogs.com/azure-west/p/6855530.html