模块可以使用regex轻松查找系统、zip存档或ftp服务器中的文件

pyFileFinder的Python项目详细描述


pyFileFinder

模块可以使用regex轻松查找系统、zip存档或ftp服务器中的文件

查找器类

什么?在

Finder类提供了基于regex搜索文件和文件夹的方便函数。在

怎么做的?在

  1. 首先通过调用
finder=Finder(settings)

设置:可能包含以下键和值的字典。
可用的键有{“parent”、“regex”、“depth”、“stopWhenFound”、“gointoundfolder”、“avoidFolders”、“区分大小写”、“ftpConnection”}

  • parent:给出应该在其中搜索文件或文件夹的根目录。 如果未设置,将使用当前文件夹(启动脚本的文件夹) 在查看存档(zip文件)时,此设置应为zip存档的路径。在

  • 正则表达式:用于检查文件或文件夹是否是搜索的一部分的正则表达式。 它可以是正则表达式或正则表达式列表 默认值为“.*”:它查找任何文件或文件夹。 例如,使用regex101检查正则表达式 例如,如果要列出父文件夹的所有文件和文件夹,则此默认值可与depth=1关联使用

  • 深度:研究的深度。如果设置为0,则仅在父文件夹中搜索文件和文件夹。 如果设置为n(n为整数),则搜索将向上转到第n个子目录。 默认值为-1,这意味着当没有更多子文件夹时,搜索不会停止。在

  • stopWhenFound:一旦搜索返回符合regex的结果,则停止搜索并返回找到的文件或文件夹。 请注意,即使迭代过程停止,当一个文件夹中的多个文件符合regex时,结果也可能包含许多文件或文件夹。
    默认值为True。在

  • gointoundfoundfolder:当False时,如果搜索并找到一个文件夹,则不会在内部查找符合regex的子文件夹。 stopWhenFound的不同之处在于:它可以找到多个文件夹,但不查找找到的文件夹。默认值为False。在

  • avoidFolders:要在搜索中排除的文件夹名称数组。不返回这些文件夹或查找。 默认值为空。在

  • 区分大小写:如果为true,则正则表达式区分大小写。默认值为True。在

  • ftpConnection:查找ftp位置时使用的ftp连接。 调用ftplib FTP(host,user,pwd)时返回此连接

  1. 调用上述函数之一:
^{pr2}$

matchFiles或matchFolders返回一个元组(ok,result_-search),如果每个regex表达式都返回一个搜索结果和结果,则ok为True 与findFiles的结果相同(resp。查找文件夹)

示例

注意,单元测试涵盖了Finder特性的全部使用,请参见此处:test_finder.py

示例1

假设从C:\myFolder开始,要查找名称包含“level”的文件夹。这些文件夹不应该远离C:\myFolder的3个子文件夹。然后,对于这些文件夹中的每个文件夹,您需要找到一个名为myarchive的zip归档文件。最后,您需要在这些zip文件中搜索所有xml文件。方法如下:

fromfiles.finderimportFinderif__name__=="__main__":# step1: find folderssettings={'parent':'C:/myFolder','regex':'level','depth':3,'stopWhenFound':False,'goIntoFolder':False}folders=Finder(settings).findFolders()# step2: find zip archives in the found folderszipsettings={'regex':r'myarchive.*\.zip','caseSensitive':False}zips=[]forfolderinfolders:zipsettings['parent']=folderzipFile=Finder(zipsettings).findFiles()ifzipFile:zips+=zipFile# step3: find xml files in zip archivesxmlsettings={'regex':r'.*\.xml','stopWhenFound':False,'caseSensitive':False}xmls=[]forzipinzips:xmlsettings['parent']=zipxmlFiles=Finder(xmlsettings).findFilesInZip()ifxmlFiles:xmls+=xmlFilesprint(*xmls,sep='\n')

示例2

假设您希望用户在提示输入用户名和密码以连接ftp服务器后,允许用户在ftp存储库中基于regex搜索文件,并让regex查找特定文件。搜索不应查找.git文件夹。在

frompyFileFinderimportFinderimportosfromftplibimportFTP,error_permfromsocketimportgaierrorimportgetpassif__name__=="__main__":settings={'parent':'/','avoidFolders':['.git'],'stopWhenFound':False}connection=Nonewhilenotconnection:user=input('login: ')ifnot'user'insettingselsesettings['user']ifnot'user'insettingselsesettings['user']pwd=getpass.getpass()ifnot'pwd'insettingselsesettings['pwd']ifnot'pwd'insettingselsesettings['pwd']try:connection=FTP('type-in-yours.host',user,pwd)excepterror_perm:print('wrong login or password')exceptgaierror:print('wrong ftp host address')input("Press Enter to end...")exit()settings['ftpConnection']=connectionsettings['regex']=input('search: ')ifnot'regex'insettingselsesettings['regex']files=Finder(settings).findFilesInFtp()ifnotfiles:print('no file found')else:print(*files,sep='\n')input("Press Enter to end...")

注意

导入日志并将其配置为在终端中显示消息。
为了方便点,只需添加以下线条:

frompyBaseApp.configurationimportConfigurationimportloggingsettings=Configuration().default('findFtp')

使用pyBaseApp.configuration,也可以在名为“的yml文件中定义设置”查找dp.yml“
(它应该是default参数给出的名称,省略“.yml”)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在Eclipse中使用ctrlshiftt而不是ctrlshiftr有什么好处?   java自动装箱概念SCJP   java如何使用JAXR和Resteasy、Angular和Wildfly10处理COR   java如何在整数数组中动态添加元素?   JAVA从继承生成器模式返回父对象继承   java问题调试生产者消费者问题   java MQ:已达到通道的最大实例数   JavaPowerMockMockito:我试图stubb的方法最终被调用   java Hibernate将多个列映射到一个表   在java中,将字符串中的单词大写,但跳过字符串中的数字和多余空格或符号   使用Eclipse将Java项目导出到JAR时出现“重复条目”错误   java使用eclipselink在实体表上指定NullConstraint   <Java>我可以在TCPIP中使用多个服务器socket吗?   带有自定义视图的java AlertDialog:调整大小以包装视图的内容   如何从用C#编写的web服务生成用于java的SOAP API?