利用Python查看目录中的文件示例详解


Posted in Python onAugust 28, 2017

前言

我们在日常开发中,经常会遇到一些关于文件的操作,例如,实现查看目录内容的功能。类似Linux下的tree命令。统计目录下指定后缀文件的行数。

功能是将目录下所有的文件路径存入list中。可以加入后缀判断功能,搜索指定的后缀名文件。主要利用递归的方法来检索文件。

仿造 tree 功能示例代码

Python2.7

列出目录下所有文件

递归法

import os
def tree_dir(path, c_path='', is_root=True):
 """
 Get file list under path. Like 'tree'
 :param path Root dir
 :param c_path Child dir
 :param is_root Current is root dir
 """
 res = []
 if not os.path.exists(path):
 return res
 for f in os.listdir(path):
 if os.path.isfile(os.path.join(path, f)):
  if is_root:
  res.append(f)
  else:
  res.append(os.path.join(c_path, f))
 else:
  res.extend(tree_dir(os.path.join(path, f), f, is_root=False))
 return res

下面是加入后缀判断的方法。在找到文件后,判断一下是否符合后缀要求。不符合要求的文件就跳过。

def tree_dir_sur(path, c_path='', is_root=True, suffix=''):
 """ Get file list under path. Like 'tree'
 :param path Root dir
 :param c_path Child dir
 :param is_root Current is root dir
 :param suffix Suffix of file
 """
 res = []
 if not os.path.exists(path) or not os.path.isdir(path):
 return res
 for f in os.listdir(path):
 if os.path.isfile(os.path.join(path, f)) and str(f).endswith(suffix):
  if is_root:
  res.append(f)
  else:
  res.append(os.path.join(c_path, f))
 else:
  res.extend(tree_dir_sur(os.path.join(path, f), f, is_root=False, suffix=suffix))
 return res
if __name__ == "__main__":
 for p in tree_dir_sur(os.path.join('E:\ws', 'rnote', 'Python_note'), suffix='md'):
 print p

统计目录下指定后缀文件的行数

仅适用os中的方法,仅检索目录中固定位置的文件

# -*- coding: utf-8 -*-
import os
def count_by_categories(path):
 """ Find all target files and count the lines """
 if not os.path.exists(path):
 return
 c_l_dict = dict() # e.g. {category: lines}
 category_list = [cate for cate in os.listdir(path) if
   os.path.isdir(os.path.join(path, cate)) and not cate.startswith('.')]
 for category_dir in category_list:
 line_count = _sum_total_line(os.path.join(path, category_dir), '.md')
 if line_count > 0:
  c_l_dict[category_dir] = line_count
 return c_l_dict
def _sum_total_line(path, endswith='.md'):
 """ Get the total lines of target files """
 if not os.path.exists(path) or not os.path.isdir(path):
 return 0
 total_lines = 0
 for f in os.listdir(path):
 if f.endswith(endswith):
  with open(os.path.join(path, f)) as cur_f:
  total_lines += len(cur_f.readlines())
 return total_lines
if __name__ == '__main__':
 note_dir = 'E:/ws/rnote'
 ca_l_dict = count_by_categories(note_dir)
 all_lines = 0
 for k in ca_l_dict.keys():
 all_lines += ca_l_dict[k]
 print 'all lines:', str(all_lines)
 print ca_l_dict

以笔记文件夹为例,分别统计分类目录下文件的总行数,测试输出

all lines: 25433
{'flash_compile_git_note': 334, 'Linux_note': 387, 'Algorithm_note': 3637, 'Comprehensive': 216, 'advice': 137, 'Java_note': 3013, 'Android_note': 11552, 'DesignPattern': 2646, 'Python_note': 787, 'kotlin': 184, 'cpp_note': 279, 'PyQt_note': 439, 'reading': 686, 'backend': 1136}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python3 pillow生成简单验证码图片的示例
Sep 19 Python
简单实现python进度条脚本
Dec 18 Python
对python数据切割归并算法的实例讲解
Dec 12 Python
Python数据可视化库seaborn的使用总结
Jan 15 Python
Python中@property的理解和使用示例
Jun 11 Python
深入了解Python iter() 方法的用法
Jul 11 Python
Python selenium的基本使用方法分析
Dec 21 Python
python3 字符串知识点学习笔记
Feb 08 Python
如何通过Python3和ssl实现加密通信功能
May 09 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
May 26 Python
python Polars库的使用简介
Apr 21 Python
上手简单,功能强大的Python爬虫框架——feapder
Apr 27 Python
Python如何通过subprocess调用adb命令详解
Aug 27 #Python
Python中序列的修改、散列与切片详解
Aug 27 #Python
Python正确重载运算符的方法示例详解
Aug 27 #Python
深入学习Python中的上下文管理器与else块
Aug 27 #Python
python利用MethodType绑定方法到类示例代码
Aug 27 #Python
Python中使用haystack实现django全文检索搜索引擎功能
Aug 26 #Python
python读取excel表格生成erlang数据
Aug 26 #Python
You might like
php 获取远程网页内容的函数
2009/09/08 PHP
php的declare控制符和ticks教程(附示例)
2014/03/21 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
关于 jQuery Easyui异步加载tree的问题解析
2016/12/06 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
Nuxt升级2.0.0时出现的问题(小结)
2018/10/08 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
小程序实现tab标签页
2020/11/16 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
如何在VSCode上轻松舒适的配置Python的方法步骤
2019/10/28 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
两年的个人工作自我评价
2014/01/10 职场文书
企业消防安全制度
2014/02/02 职场文书
校园文化建设方案
2014/02/03 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
法人授权委托书样本
2014/09/19 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
治庸问责工作总结
2015/08/11 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python
Mysql 文件配置解析介绍
2022/05/06 MySQL
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS