使用os模块实现展示目录下的文件和文件夹
Windows 10家庭中文版,Python 3.6.4
今天学习了os模块,下面是使用它开发的一个展示目录下的文件和文件夹的函数,代码如下:
import os # deep大于等于1的整数,默认为1;
# deep为1时,用于显示当前目录下的文件和文件夹;
# deep控制显示的当前目录下的层级,当前为1,每深入一层(进入下一级文件夹),加1;
def listdir(deep = 1):
# path is an absolute path
def listdir_inner(path, ilevel = 0):
if ilevel == deep:
return # 添加到每条文件信息前面的缩进,每深入一层增加4个空格
prefix = ' ' * (4 * ilevel) # 检查目录是否存在
if not os.path.exists(path):
print(prefix, 'Error: Path (%s) does not exist.' % path, sep = '')
return # 如果path代表文件,立即返回
if os.path.isfile(path):
print(prefix, 'Warning: ', path, ' is a file!', sep = '')
return # 统一使用Linux风格的路径
path = path.replace('\\', '/') if not path.endswith('[/\\]'):
path += '/' # 判断目录path是否可以执行os.listdir操作
# 在Windows下产生了PermissionError错误,但用os.access检查却是可以访问的
# Linux上可能使用os.stat()来检查文件或文件夹的权限
perm_ok = True
try:
dlist = os.listdir(path)
except PermissionError as err:
perm_ok = False
print(prefix, 'Error: ', err.strerror, sep = '')
except Exception as err:
perm_ok = False
print(prefix, 'Error: ', err.strerror, sep = '') # 展示目录下的文件和文件夹
if perm_ok:
for item in dlist:
if os.path.isfile(path + item):
# 文件,直接输出
print(prefix, 'F-', item, sep = '')
elif os.path.isdir(path + item):
# 子目录,输出信息
print(prefix, 'D-', item, sep = '')
# 寻找子目录下的文件和文件夹
# 注意,层级加1了
listdir_inner(path + item + '/', ilevel + 1)
else:
# 其它类型,可能是link、mount等
print(prefix, 'X-', item, sep = '') return listdir_inner # 测试
if __name__ == '__main__':
d2 = listdir(deep = 2) print('展示目录下的文件:')
# 展示D盘下的文件及文件夹目录,深度为2
d2('d:/')
使用方法见测试——调用listdir函数建立显示不同深度的函数,再使用新建的函数 展示传入的目录(绝对路径)下的文件和文件夹。
测试可以更多的,在目前的代码下,使用d:、d:/、d:\\三个方式都是访问D盘下的文件夹和目录。
调试过程中遇到错误:
C盘有下一个识别为文件夹的目录无法执行listdir:

使用os.access(...)函数检查其读写执行权限时,都是可以的。
使用os.stat(...)函数检测其权限,也是可以的,但却无法执行listdir,而且,如果此文件夹后面带着反斜杠传入os.stat(...),os.stat(...)执行就会报错。
后来网上找到一篇博文,其中使用win32security来检测文件权限,但发生错误:

此问题后面也没有继续深究了,先这样。
可能的测试输入:使用unitest模块或Flask学习时用到的pytest(都没用过)
d:
d:/
d:\\
c
d
e
d:/existed_file
d:/unexisted_file
c:/
...
下面是一个测试结果:

更改deep为1:

函数改进方向:
添加测试;
添加更专业的注释;
更改函数名为ulistdir,开头的u表示为用户自定义;
deep参数没有检测;
print(...)函数的使用方法需要改进,每个都有sep=''这个参数;
目前使用嵌套函数,可以改造为类来实现;
测试过检测本机Windows上的目录,扩展展示网络主机上的文件夹;
还有什么呢?
os.stat(...)函数还需要深入学习,以及Linux下的stat命令,以及ls命令。
使用os模块实现展示目录下的文件和文件夹的更多相关文章
- python3通过os模块统计指定目录下文件个数
代码: import os path = r"C:\Users\Administrator\Desktop\***" print('filenum:',len([lists for ...
- python os模块获取指定目录下的文件列表
bath_path = r"I:\ner_results\ner_results" dir_list1 = os.listdir(bath_path) for dir1 in di ...
- Python实现插件机制——自动import一个目录下的所有.py文件
假设有这样一个目录结构: /src main.py /plugins __init__.py a.py ...
- 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本
摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 ...
- Python 遍历目录下的子目录和文件
import os A: 遍历目录下的子目录和文件 for root,dirs ,files in os.walk(path) root:要访问的路径名 dirs:遍历目录下的子目录 files:遍历 ...
- gen目录无法更新,或者gen目录下的R.JAVA文件无法生成
gen目录无法更新,或者gen目录下的R.JAVA文件无法生成 1.gen目录的用处 android gen目录下的R.java并不是由用户创建,而是android工程本身将android的资源进行自 ...
- php源码之遍历目录下的所有的文件
<?php //遍历目录下的所有的文件 -- 递归调用 // http://www.manongjc.com/article/1495.html function get_all_file1($ ...
- 使用 NIO.2 遍历目录下所有的Java文件
package wellGrounded; import java.io.IOException; import java.nio.file.FileVisitResult; import java. ...
- java 提取目录下所有子目录的文件到指定位置
package folder; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundExcept ...
随机推荐
- 初探Java 9 的的模块化
Java 9中最重要的功能,毫无疑问就是模块化(Module),它将自己长期依赖JRE的结构,转变成以Module为基础的组件,当然这在使用Java 9 开发也和以前有着很大的不同. Java8或更加 ...
- 【转】嵌入式Linux驱动面试题三道
题一: Linux设备中字符设备与块设备有什么主要的区别? 字符设备:字符设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性.字符设备驱动程序通常至少实现open,cl ...
- kafka问题集(一):broker少于kafka节点数
问题集仅为个人实践,若有不准确的,欢迎交流! 一.现象: 集群有3台kafka服务器,而kafka 的9002界面上broker仅有2个:log.dirs配置路径为/data/kafka/data,而 ...
- 【BZOJ2813】奇妙的Fibonacci
Description Fibonacci数列是这样一个数列: F1 = 1, F2 = 1, F3 = 2 . . . Fi = Fi-1 + Fi-2 (当 i >= 3) pty忽 ...
- GoLand语言快捷键
快捷键 作用 备注 ctrl + n 导航到类名 ctrl + shift + n 导航到文件 ctrl + e/ctrl + shift + e 打开到最近的文件/打开最近修改的文件 ctrl + ...
- Tcp协议三次握手四次挥手
一.什么是TCP TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的.可靠的. 基于IP的传输层协议.TCP在IP报文的协议号是6. 二.什 ...
- Mat中两种像素遍历方法比较
小白,入门中,不足其指正.刚刚接触opencv,从一个Matlab风格的编程环境突然跳转到C++,实在有些不适.单就pixels scanning花了好长时间研究.opencv-tutorials给出 ...
- Python【yagmail】模块发邮件
#步骤一:import yagmail #步骤二:实例化一个发邮件的对象username = '553637138@qq.com' #邮箱账号pwd='sa2008' #授权码mail = yagma ...
- P2627 修剪草坪
P2627 修剪草坪 题目描述 在一年前赢得了小镇的最佳草坪比赛后,Farm John变得很懒,再也没有修剪过草坪.现在,新一轮的最佳草坪比赛又开始了,Farm John希望能够再次夺冠. 然而,Fa ...
- python中高阶函数与装饰器
高阶函数的定义:传入参数有函数名或者返回值有内置函数名的函数. 最简单的高阶函数: def add(x, y, f): return f(x) + f(y) add(-5, 6, abs) 常用 ...