请教个循环判断的问题

色郎中 2017-04-05 09:03:49

2017040514495198.bin
20170405144956488.txt
201704051450018.ppt
20170405145006232.pas
20170405145006232.txt
201704051450018.txt

目录有上面的文件,想根据后缀名,打印目录下的文件;

用下面注释掉的判断语句,可以打印 列表中的三种文件出来;

而用 if [os.path.splitext(filename)[1] ==pattern[i] for i in range(len(pattern))]: 这句作为判断
PPT文件也打印出来了

如何修改,才能有期望的效果呢? 谢谢
这样就可以不修改函数判断条件,就可以修改过滤条件了




def filtter_files_pattern(dir,pattern=[]):
for dirpath,dirnames, filenames in os.walk(dir):
for filename in filenames:
#if os.path.splitext(filename)[1] ==pattern[0]or os.path.splitext(filename)[1] == pattern[1] or os.path.splitext(filename)[1] == pattern[2]:
if [os.path.splitext(filename)[1] ==pattern[i] for i in range(len(pattern))]:
print filename

if __name__ == '__main__':
pp=['.txt','.pas','.bin']
filtter_files_pattern('./backFile/',pp)

...全文
82 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sanGuo_uu 2017-04-06
  • 打赏
  • 举报
回复
像这样子也能实现 用个in
# -*- coding:utf-8 -*-

import os

def filtter_files_pattern(dir,pattern=[]):
    for dirpath,dirnames, filenames in os.walk(dir):
        for filename in filenames:
            #if os.path.splitext(filename)[1] ==pattern[0]or os.path.splitext(filename)[1] == pattern[1] or os.path.splitext(filename)[1] == pattern[2]:
            #zzr=[os.path.splitext(filename)[1] ==pattern[i] for i in range(len(pattern))]
            if os.path.splitext(filename)[1] in pattern:
            	print filename

if __name__ == '__main__':
	pp=['.txt','.pas','.bin']
	filtter_files_pattern('D:/testP/backFile/',pp)
sanGuo_uu 2017-04-06
  • 打赏
  • 举报
回复
if list是判断list是否非空的 你那个ppt就是这样子出来的 也就是说,你这个if有问题啊
# -*- coding:utf-8 -*-

import os

def filtter_files_pattern(dir,pattern=[]):
    for dirpath,dirnames, filenames in os.walk(dir):
        for filename in filenames:
            #if os.path.splitext(filename)[1] ==pattern[0]or os.path.splitext(filename)[1] == pattern[1] or os.path.splitext(filename)[1] == pattern[2]:
            zzr=[os.path.splitext(filename)[1] ==pattern[i] for i in range(len(pattern))]
            if zzr:
            	print zzr
                #print filename

if __name__ == '__main__':
	pp=['.txt','.pas','.bin']
	filtter_files_pattern('D:/testP/backFile/',pp)
色郎中 2017-04-06
  • 打赏
  • 举报
回复
引用 2 楼 u012536120 的回复:
像这样子也能实现 用个in
# -*- coding:utf-8 -*-

import os

def filtter_files_pattern(dir,pattern=[]):
    for dirpath,dirnames, filenames in os.walk(dir):
        for filename in filenames:
            #if os.path.splitext(filename)[1] ==pattern[0]or os.path.splitext(filename)[1] == pattern[1] or os.path.splitext(filename)[1] == pattern[2]:
            #zzr=[os.path.splitext(filename)[1] ==pattern[i] for i in range(len(pattern))]
            if os.path.splitext(filename)[1] in pattern:
            	print filename

if __name__ == '__main__':
	pp=['.txt','.pas','.bin']
	filtter_files_pattern('D:/testP/backFile/',pp)
用IN 是达到效果了 ,,,上面的方法也试了,好像还是会把其他类型的文件也打印出来 谢谢 in 的方式可以

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧