Python编程:获取ftp目录下文件夹和文件

简介: Python编程:获取ftp目录下文件夹和文件

原文标题《python ftplib.FTP 获取当前路径下所有目录》


python内置库ftplib中,FTP 模块里有一个dir函数,可以打印出当前路径下所有文件,但是这个函数没有返回值,只是打印出来。


还有一个nlst函数,可以返回一个文件名的列表,但是只有文件名,没有详细信息,无法判断是否是目录。


目前我只有两个笨办法,

一个继承FTP类,自己实现一个getSubdir()方法,可以直接copy nlst()函数的源码,把cmd的字符串替换成“LIST”,再加上一个判断语句。


另外就是自己写一个类,包含一个list成员和一个getSubdir方法,方法中将每个文件append到list中,该方法作为dir函数的参数传入。


参考:

http://www.cnblogs.com/vawter/p/5987432.html

https://www.cnblogs.com/hltswd/p/6228992.html


类MyFTP就是按照上述所说第一种方法,继承。修改了源代码,将使用变得简单了,可以单独存为一个文件,导入使用,当然参考上面第2个链接就可以实现上传下载功能,这里不再赘述。


# myftp.py
from ftplib import FTP
class MyFTP(FTP):
    encoding = "gbk"  # 默认编码
    def getSubdir(self, *args):
        '''拷贝了 nlst() 和 dir() 代码修改,返回详细信息而不打印'''
        cmd = 'LIST'
        func = None
        if args[-1:] and type(args[-1]) != type(''):
            args, func = args[:-1], args[-1]
        for arg in args:
            cmd = cmd + (' ' + arg)
        files = []
        self.retrlines(cmd, files.append)
        return files
    def getdirs(self, dirname=None):
        """返回目录列表,包括文件简要信息"""
        if dirname != None:
            self.cwd(dirname)
        files = self.getSubdir()
        # 处理返回结果,只需要目录名称
        r_files = [file.split(" ")[-1] for file in files]
        # 去除. .. 
        return [file for file in r_files if file != "." and file !=".."]
    def getfiles(self, dirname=None):
        """返回文件列表,简要信息"""
        if dirname != None:
            self.cwd(dirname)  # 设置FTP当前操作的路径
        return self.nlst()  # 获取目录下的文件 
    # 这个感觉有点乱,后面再说,
    # def getalldirs(self, dirname=None):
    #     """返回文件列表,获取整个ftp所有文件夹和文件名称简要信息"""
    #     if dirname != None:
    #         self.cwd(dirname)  # 设置FTP当前操作的路径
    #     files = []
    #     dirs = set(self.getdirs()) - set(self.getfiles())
    #     if dirs != {}:
    #         for name in dirs:
    #             self.cwd("..")  # 返回上级
    #             files += self.getalldirs(name)
    #     return files
def test():
    ftp = MyFTP()  # 实例化
    ftp.connect("ip", port)  # 连接
    ftp.login("username", "password")  # 登录
    # 获取第一层目录下的文件
    # lst =ftp.getdirs()
    # print(lst)
    # for name in lst:
    #     ftp.cwd("..")  # 返回上级
    #     names = ftp.getdirs(name)
    #     print(names)
    lst = ftp.getdirs()  # 返回目录下文件夹和文件列表
    print(lst)
    ftp.quit()  # 退出
if __name__ == '__main__':
    test()

当然,使用的时候可以新建一个类,封装起来,这样便于使用


from myftp import MyFTP
class FtpData(object):
    def __init__(self):
        self.ftp = MyFTP()
        self.ftp.connect("ip", port)
        self.ftp.login("username", "password")
    def getfiles(self, dirname):
        lst =self.ftp.getdirs(dirname)
        return lst
    def __del__(self):
        self.ftp.quit()
if __name__ == '__main__':
    ftpdata = FtpData()
    lst = ftpdata.getfiles("dirname")
    print(lst)
相关文章
|
2月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
977 2
|
2月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
280 102
|
2月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
303 104
|
2月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
254 103
|
2月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
192 82
|
1月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
177 3
|
1月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
406 3
|
1月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
257 3
|
1月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
|
1月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
239 0

推荐镜像

更多