利用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 相关文章推荐
python中的字典使用分享
Jul 31 Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
python开发环境PyScripter中文乱码问题解决方案
Sep 11 Python
Python处理文本文件中控制字符的方法
Feb 07 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
浅谈scrapy 的基本命令介绍
Jun 13 Python
numpy中的高维数组转置实例
Apr 17 Python
对Python中DataFrame选择某列值为XX的行实例详解
Jan 29 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
tensorflow 查看梯度方式
Feb 04 Python
python encrypt 实现AES加密的实例详解
Feb 20 Python
python cv2.resize函数high和width注意事项说明
Jul 05 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中json_encode UTF-8中文乱码的更好解决方法
2014/09/28 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
PHP类的特性实例分析
2016/09/28 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
2016/11/25 PHP
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
js调用css属性写法
2013/09/21 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
vue组件实例解析
2017/01/10 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
Python中的闭包详细介绍和实例
2014/11/21 Python
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
Python中list初始化方法示例
2016/09/18 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
jupyter notebook清除输出方式
2020/04/10 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
Python自带的IDE在哪里
2020/07/01 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
洛佩桑酒店官方网站:Lopesan Hotels
2019/04/15 全球购物
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
2014年教师工作总结
2014/11/10 职场文书
2014年汽车销售工作总结
2014/12/01 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
2015毕业实习推荐信
2015/03/23 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js