叶秋哇 2023-02-01 09:52 采纳率: 38.1%
浏览 39
已结题

ftp 远程目录文件对比下载没有筛选的

使用python连接ftp 下载里面的文件 将下载的文件筛选出来然后再上传回来,先遇到的问题是 每天下载和上传回来的文件都对应的上,但是16号的文件无法下载下来 导致当天的文件没有筛选回传,求指导一下可以自动根据那天没有上传的文件 自动下载那天的文件,我现在使用的方法是下载每天前一天的方法

  • 写回答

2条回答 默认 最新

  • CodeBytes 2023-02-01 10:28
    关注

    参考方案,最新代码,还望采纳:

    import ftplib
    import os
    import time
    
    ftp = ftplib.FTP("ftp.example.com")
    ftp.login("username", "password")
    
    def download_files(ftp, date):
        # 切换到远程服务器的指定目录
        ftp.cwd("/remote/directory")
        # 获取当前目录下的文件列表
        files = ftp.nlst()
        for file_name in files:
            # 判断文件是否是当天的文件
            if date in file_name and file_name.endswith(".xlsx"):
                # 下载文件
                with open(file_name, "wb") as f:
                    ftp.retrbinary("RETR " + file_name, f.write)
                # 进行筛选操作
                # TODO: 筛选代码
    
    # 获取当前的日期
    today = time.strftime("%Y-%m-%d")
    
    # 循环每天的日期
    for i in range(11, 16):
        date = f"2023-02-{i:02d}"
        if date >= today:
            break
        download_files(ftp, date)
    
    ftp.quit()
    
    
    

    16.10

    import ftplib
    import os
    
    # FTP 服务器地址和端口号
    ftp_server = "ftp.example.com"
    port = 21
    
    # FTP 用户名和密码
    username = "username"
    password = "password"
    
    # 指定 FTP 目录
    ftp_dir = "/data"
    
    # 本地下载目录
    local_dir = "./download"
    
    # 连接到 FTP 服务器
    ftp = ftplib.FTP()
    ftp.connect(ftp_server, port)
    ftp.login(username, password)
    ftp.cwd(ftp_dir)
    
    # 获取 FTP 目录下的全部数据
    ftp_files = ftp.nlst()
    
    # 记录OLD文件的数量和RPA文件的数量
    old_count = 0
    rpa_count = 0
    
    # 遍历 FTP 目录下的全部数据,统计OLD和RPA文件的数量
    for file in ftp_files:
        if file.startswith("OLD"):
            old_count += 1
        elif file.startswith("rpa"):
            rpa_count += 1
    
    # 如果OLD文件数量等于RPA文件数量,则不下载
    if old_count == rpa_count:
        print("OLD文件数量等于RPA文件数量,无需下载")
    
    # 如果OLD文件数量少于RPA文件数量,则根据后面的日期20221227来判断RPA少那个,并下载OLD对应的文件
    else:
        for file in ftp_files:
            if file.startswith("OLD"):
                # 如果RPA文件不存在,则下载OLD对应的文件
                rpa_file = file.replace("OLD", "rpa")
                if rpa_file not in ftp_files:
                    local_file = os.path.join(local_dir, file)
                    with open(local_file, "wb") as f:
                        ftp.retrbinary("RETR " + file, f.write)
    
    # 关闭连接
    ftp.quit()
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    1人已打赏
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月9日
  • 已采纳回答 2月1日
  • 创建了问题 2月1日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度