现在的位置: 主页 > 企业简介 > 文章列表

python查漏补缺之list列表的remove

作者:昆明飞华工贸有限公司 来源:www.kmfhgm.com    未知发布时间:2017-09-03 12:35:21
python查漏补缺之list列表的remove

今天碰到一个坑,python的列表问题,错误往往出在你最熟悉的地方,特别是小地方,问题:我要列出目录下所有的下一级文件和子目录(只包含下一级目录而不包括目录的目录及文件这种情况),然后只获取当前子目录。。问题描述很清楚,很轻易的就写了个函数,不就是os.listdir(path)嘛,对就是这个,这个功能可以列出下一级的所有目录和文件,返回结果在一个列表中,那我们的主要工作的常规思路是不是就是把这个结果列表进行过滤?好,os也有相关的功能,os.path.isfile(filepath),就可以判断文件是不是一个文件,是文件,那就从列表删除,处理完,就是我们要的最终结果列表了,是不是这样呢?想法很完美,现实很残酷,很意外,这个搞不定的。我们用代码实验:

import os def Count_SubDir(src): listall = os.listdir(src) for line in listall: filepath = os.path.join(src,line) if os.path.isfile(filepath): listall.remove(line) return listall if __name__ == "__main__": src = r'f:\src' ret = Count_SubDir(src) for line in ret: print line 输出结果:

>>> ================================ RESTART ================================ >>> 1025 1028 1029 1030 1031 1032 1033 1035 1036 1037 1038 1040 1041 1042 1043 1044 1045 1046 1049 1053 1055 2052 2070 3076 3082 Graphics NDP40-KB2894842.msp Setup.exe SetupUi.dll SetupUtility.exe sqmapi.dll UiInfo.xml >>> 看结尾。。。还依然有文件存在,采集软件,我们对比下没经过处理的原结果列表:

>>> ================================ RESTART ================================ >>> 1025 1028 1029 1030 1031 1032 1033 1035 1036 1037 1038 1040 1041 1042 1043 1044 1045 1046 1049 1053 1055 2052 2070 3076 3082 DHtmlHeader.html Graphics header.bmp NDP40-KB2894842.msp ParameterInfo.xml Setup.exe SetupEngine.dll SetupUi.dll SetupUi.xsd SetupUtility.exe SplashScreen.bmp sqmapi.dll Strings.xml UiInfo.xml watermark.bmp >>> 最后的文件项目,可以对比下,是不是发现什么规律了。。。隔一个漏掉一个。。。

那为什么会出现这种情况呢?就是因为for循环和list.remove()方法的配合有问题,把流程自己走一遍,问题就暴露出来了

我们走一遍:首先for循环,每次循环选中一个line,如果这个line是文件,从list中删除,然后第二次循环。。。。问题来了,是不是漏掉了什么?删除之后,是不是还有什么操作没有代码显示?答案是有,

def Count_SubDir(src): listdir = [] listall = os.listdir(src) for line in listall: filepath = os.path.join(src,line) if os.path.isdir(filepath): listdir.append(filepath) return listdir 输出结果为:

Type "copyright", "credits" or "license()" for more information. >>> ================================ RESTART ================================ >>> f:\src\1025 f:\src\1028 f:\src\1029 f:\src\1030 f:\src\1031 f:\src\1032 f:\src\1033 f:\src\1035 f:\src\1036 f:\src\1037 f:\src\1038 f:\src\1040 f:\src\1041 f:\src\1042 f:\src\1043 f:\src\1044 f:\src\1045 f:\src\1046 f:\src\1049 f:\src\1053 f:\src\1055 f:\src\2052 f:\src\2070 f:\src\3076 f:\src\3082 f:\src\Graphics >>>
好了,这次真的完整了,是真的目录了。。。。不敢信,一开始没找到问题的时候,总感觉没问题。。。不分析结果还真把remove方法的末尾处理给漏掉了。。。我想不少人也只是知道remove的删除这一步吧,没有想到删除之后的列表调整吧,哈哈!



企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:神农架网站制作 http://shennongjia.666rj.com

上一篇:iOS KVC 概述 下一篇:最后一页