使用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 ...
随机推荐
- 洛谷 P2389 电脑班的裁员 解题报告
题意: 给定一段长为N的序列,选取其中的至多M段使这些子段和最大. 当N=1000时,我们可以采用动态规划解法 令\(dp[i][j][k]\)代表当前选至位置\(i\)处于第\(j\)段当前是否选取 ...
- 【codeforces 778C】 Peterson Polyglot
http://codeforces.com/problemset/problem/778/C (题目链接) 题意 给出一个字典树,问删掉哪一层以后,得到的字典树最小. Solution 直接对于每一层 ...
- 解题:POI 2014 Ant colony
题面 既然我们只知道最后数量为$k$的蚂蚁会在特殊边上被吃掉,不妨逆着推回去,然后到达每个叶节点的时候就会有一个被吃掉的蚂蚁的区间,然后二分一下就好啦 #include<cstdio> # ...
- 【trie树】【P4551】 最长异或路径
Description 给定 \(n\) 个点的带边权树,求一条异或和最大的简单路径 Input 第一行是点数 \(n\) 下面 \(n - 1\) 行每行三个整数描述这棵树 Output 输出一个数 ...
- App统计指标定义
度量(指标) 定义 活跃用户 指启动应用的用户(去重,即1台设备打开多次会被计为1个活跃用户). 是衡量一个应用运营情况最基础的一个指标,用以表示用户规模.通常根据不同的时间限定,有日活跃用户.周活跃 ...
- python基础之while语句continue以及break --语法以及案例
1.while 死循环 [root@localhost python]# cat while.py #!/usr/bin/env python # _*_ coding:utf8 _*_ import ...
- Python模拟登录cnblogs
Python利用requests.Session对象模拟浏览器登录cnblogs request.Session对行可以跨请求的保持cookie,非常方便的用于模拟登录. cnblogs登录页面分析: ...
- gulp+webpack配置
转自:https://www.jianshu.com/p/2549c793bb27 gulp gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开 ...
- activity 中获取控件的宽高
1.第一种方式: TextView textview3 = findViewById(R.id.textview3); textView3.post(new Runnable() { @Overrid ...
- Jupyter Notebook Tutorial: Introduction, Setup, and Walkthrough
Jupyter Notebook Tutorial: Introduction, Setup, and Walkthrough YouTube https://www.youtube.com/watc ...