首先了解一下几个文件目录处理的函数:
os.listdir(path)#获取path目录下的所有文件
os.path.join(path, file_name)#获取path于file_name组合后的路径,相当于 path + '/' + file_name
strip(char) 方法用于移除字符串头尾指定的字符(默认为空格)
检索指定目录(绝对路径)下的 py 后缀文件
思路:思路非常简单,对于当前目录,直接遍历其所有子目录和文件,对于目录继续递归,对于文件则判断其后缀是否是 .py,再将符合条件的文件名放个列表中即可
代码:
1 #!/usr/bin/python3 2 3 import os 4 import os.path 5 6 l = [] 7 def get_file(path, l): 8 file_list = os.listdir(path)#获取path目录下的所有文件 9 for file_name in file_list: 10 #获取path于file_name组合后的路径,即path路径下某个子目录或子文件的目录 11 path_tmp = os.path.join(path, file_name) 12 # path_tmp = path + '/' + file_name#和上面的语句等价 13 if os.path.isdir(path_tmp):#如果是目录 14 get_file(path_tmp, l)#递归查找 15 elif str(file_name[-3:]) == '.py':#如果不是目录,则比较后缀名 16 l.append(path_tmp)#如果是.py后缀,则将路径加入列表l中 17 18 if __name__ == '__main__': 19 path = input('请输入路径(绝对路径):').strip() 20 get_file(path, l) 21 22 print('在 % s 目录及其子目录下找到 %d 个 py 文件' % (path, len(l))) 23 if(len(l)): 24 print('分别为:') 25 26 for file_path in l: 27 print(file_path)
显然,我们只要对上面的代码做点修改即可让其检索指定目录下的指定后缀文件:
代码:
1 #!/usr/bin/python3 2 3 import os 4 import os.path 5 6 l = [] 7 def get_file(path, l, suffix): 8 file_list = os.listdir(path)#获取path目录下的所有文件 9 # print(file_list) 10 for file_name in file_list: 11 #获取path于file_name组合后的路径,即path路径下某个子目录或子文件的目录 12 path_tmp = os.path.join(path, file_name) 13 # path_tmp = path + '/' + file_name#和上面的语句等价 14 if os.path.isdir(path_tmp):#如果是目录 15 get_file(path_tmp, l, suffix)#递归查找 16 elif str(file_name[-len(suffix):]) == suffix:#如果不是目录,则比较后缀名 17 l.append(path_tmp)#如果是suffix后缀,则将路径加入列表l中 18 19 if __name__ == '__main__': 20 path = input('请输入路径(绝对路径):').strip()#strip() 方法用于移除字符串头尾指定的字符(默认为空格) 21 suffix = input('请输入指定后缀:').strip() 22 23 get_file(path, l, suffix) 24 25 print('在 % s 目录及其子目录下找到 %d 个 py 文件' % (path, len(l))) 26 if(len(l)): 27 print('分别为:') 28 29 for file_path in l: 30 print(file_path)
我们再将思路拓展一点点,写个检索指定路径下包含指定关键字的文件的小代码:
代码:
1 #!/usr/bin/python3 2 3 import os 4 import os.path 5 6 l = [] 7 def get_file(path, l, keyword): 8 file_list = os.listdir(path)#获取path目录下的所有文件 9 # print(file_list) 10 for file_name in file_list: 11 #获取path于file_name组合后的路径,即path路径下某个子目录或子文件的目录 12 path_tmp = os.path.join(path, file_name) 13 # path_tmp = path + '/' + file_name#和上面的语句等价 14 if os.path.isdir(path_tmp):#如果是目录 15 get_file(path_tmp, l, keyword)#递归查找 16 elif file_name.find(keyword) != -1:#如果不是目录,则比较后缀名 17 l.append(path_tmp)#如果包含指定关键字,则将路径加入列表l中 18 19 if __name__ == '__main__': 20 path = input('请输入路径(绝对路径):').strip()#strip() 方法用于移除字符串头尾指定的字符(默认为空格) 21 keyword = input('请输入指定关键字:').strip() 22 23 get_file(path, l, keyword) 24 25 print('在 % s 目录及其子目录下找到 %d 个 py 文件' % (path, len(l))) 26 if(len(l)): 27 print('分别为:') 28 29 for file_path in l: 30 print(file_path)