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)
相关文章
|
5月前
|
数据采集 监控 算法
Python文件与目录比较全攻略:从基础操作到性能优化
文件比较的核心在于数据指纹校验,通过逐字节比对生成唯一标识,确保内容一致性。从标准库的os与filecmp到高性能第三方库如pydiffx,再到分布式与量子加密技术的未来趋势,文件比较广泛应用于数据备份、代码审查与系统监控等领域,是保障数据完整性的关键技术手段。
126 0
|
11月前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
572 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
11月前
|
监控 网络安全 开发者
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
413 20
|
Python
Python实用记录(四):os模块-去后缀或者改后缀/指定目录下图片或者子目录图片写入txt/csv
本文介绍了如何使用Python的os模块来操作文件,包括更改文件后缀、分割文件路径和后缀、将指定目录下的所有图片写入txt文档,以及将指定目录下所有子目录中的图片写入csv文档,并为每个子目录分配一个标签。
214 1
|
网络安全 Windows
Jetson 学习笔记(十五):FTP协议传输文件
本文介绍了如何使用WinSCP软件通过FTP协议在Windows和Jetson设备之间传输文件,并分享了一些操作经验和技巧。
255 0
Jetson 学习笔记(十五):FTP协议传输文件
|
编解码 UED Python
Python批量修改指定目录下图片的大小名文章
Python批量修改指定目录下图片的大小名文章
148 1
|
存储 数据安全/隐私保护 Python
Python编程--使用Ftplib破解FTP用户口令的方法
Python编程--使用Ftplib暴力破解FTP用户口令
156 1
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。
160 0
|
Unix Linux 测试技术
FTP命令不同系统之间传输文件
FTP命令不同系统之间传输文件
|
Linux
Linux:开启FTP传输文件
Linux:开启FTP传输文件
330 0
Linux:开启FTP传输文件

推荐镜像

更多