ftp文件传输

import sys
import json
from ftplib import FTP, all_errors
from datetime import datetime

def list_files_with_size(ftp):
    file_list = []
    filenameList = []
    try:
        filepath = ftp.pwd()
        use_mlsd = False
        try:
            entries = list(ftp.mlsd())
            use_mlsd = True
        except:
            entries = ftp.nlst()

        if use_mlsd:
            for name, facts in entries:
                if facts.get('type') == 'file':
                    try:
                        size = int(facts.get('size', 0))
                        modify_raw = facts.get('modify')
                        modifytime = parse_ftp_modify_time(modify_raw) if modify_raw else ""
                        filenameList.append(name)
                        file_list.append({
                            "source_path": filepath,
                            "filename": name,
                            "size": size,
                            "modification_time": modifytime
                        })
                    except:
                        continue
        else:
            for name in entries:
                try:
                    size = ftp.size(name)
                    modify_raw = ftp.sendcmd(f"MDTM {name}")[4:].strip()
                    modifytime = parse_ftp_modify_time(modify_raw)
                    filenameList.append(name)
                    file_list.append({
                        "source_path": filepath,
                        "filename": name,
                        "size": size,
                        "modification_time": modifytime
                    })
                except:
                    continue

    except Exception as e:
        print(f"Get File List Error: {e}")

    return {
      "filenameList":filenameList,
      "file_list":file_list
    }

def parse_ftp_modify_time(modify_raw):
    try:
        dt = datetime.strptime(modify_raw, "%Y%m%d%H%M%S")
        return dt.strftime("%Y-%m-%d %H:%M:%S")
    except:
        return modify_raw


def main():
    msg = json.load(sys.argv[2])
    ftp_ip = msg["eqp"]["ip"]
    ftp_port = msg["eqp"]["port"]
    ftp_user = msg["eqp"]["username"]
    ftp_pass = msg["eqp"]["password"]
    remote_dir = msg["eqp"]["source_path"]

    try:
        ftp = FTP()
        ftp.connect(ftp_ip, ftp_port)
        ftp.login(ftp_user, ftp_pass)
        ftp.cwd(remote_dir)

        result = list_files_with_size(ftp)

        file_result = {
          "requestData":msg,
          "processData":{
            "filenameList":result["filenameList"],
            "file_list":result["file_list"]
          },
          "source":msg
        }

        print(file_result)  # json输出

    except all_errors as e:
        print(f"FTP ERROR: {e}")
    finally:
        try:
            ftp.quit()
        except:
            pass

if __name__ == '__main__':
    main()
去掉def,将代码整合为一体,print(file_result)结尾
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值