在学习Python时,少不了要多多编写程序,可是时间一长,当我们想要查找以前写过的某个程序时,少不了要好长一段时间进行查找,说不定还得挨个打开程序进行查找。那么有没有一种简单的方法,能使我们写过的Python程序像一本书的目录那样呈现出来呢?
- 首先在编写程序的时候,我们要养成一个良好的习惯,在每个程序的第一行写上注释,说明这个程序是干什么的;
- 其次,可以按照自己的个人习惯将程序整理在一个(或多个)目录下;
- 最后一点,也就是我们本篇文章的重点了——利用OS模块打印指定目录下py文件(Python程序文件名以 '.py' 结尾)的绝对路径,以及读取并打印每个程序的第一行注释。
这样,当我们想要查找某个程序时,只需要将这个程序先运行一下,我们便可以像查看书的目录一样,找到我们想要的程序了。因为这个程序是以我电脑上的文件做参考的,所以不具有通用性,大家在自己的电脑上运行时,要结合自己电脑文件的位置做适当的调整。下面放一张我电脑上Python程序的存放情况:
方法一:
import os
os.chdir("D:\\st13\\python") #切换到D:\\st13\\python目录
for fp in os.listdir(): #遍历D:\\st13\\python下的所有文件名和目录名
#如果fp是一个目录,则将路径D:\\st13\\python与fp连接起来
if os.path.isdir(fp):
print(os.path.join("D:\\st13\\python",fp))
for f in os.listdir(fp): #遍历目录fp下的所有文件名和目录名
#如果f是以'.py'结尾的,则打印出文件f的绝对路径
if f.endswith(".py"):
print("\t",os.path.abspath(f),end='')
#读取并打印文件f的第一行内容
with open(fp+"\\"+f,encoding="utf-8") as f1:
print("\t\t",f1.readline())
运行结果如下:(内容太多,只放了部分结果)
D:\st13\python\1.10
D:\st13\python\zuoye1.py #滚动的广告屏幕
D:\st13\python\zuoye2.py #字符串的格式化
D:\st13\python\zuoye3.py #位运算 & | ^(异或) ~(取反) >> <<
D:\st13\python\zuoye4.py #统计一句话中数字、字母、汉字出现的次数
D:\st13\python\zuoye5.py #分支语句的练习
D:\st13\python\1.11
D:\st13\python\zuoye1.py #for、while以及多层循环
D:\st13\python\zuoye2.py #控制循环break、continue、else的使用
D:\st13\python\zuoye3.py #元组的用法 判断某天是这一年的第几天
D:\st13\python\zuoye4.py #列表的用法---学生成绩管理系统
D:\st13\python\1.14
D:\st13\python\zuoye1.py #集合的基本用法
D:\st13\python\zuoye2.py #字典的基本用法
D:\st13\python\zuoye3.py #使用字典获取12306车站信息
D:\st13\python\zuoye4.py #统计12306所有全拼重复的车站信息
方法二:
import os
def sfile(dir,layer=1):
print("\t"*(layer-1)+dir)
#遍历D:\\st13\\python下的所有文件名和目录名
for fp in os.listdir(dir):
nf=os.path.join(dir,fp) #将路径D:\\st13\\python与fp连接起来
#如果nf是一个目录,则调用sfile()函数
if os.path.isdir(nf):
sfile(nf,layer+1)
#如果nf是一个文件,且以'.py'结尾,则打印文件nf的绝对路径
else:
if nf.endswith(".py"):
print("\t"*layer+nf,end="\t"*(5-layer))
#读取并打印文件nf的第一行内容
with open(nf,encoding="utf-8") as f1:
print(f1.readline().strip())
sfile("D:\\st13\\python") #调用sfile函数,并将D:\\st13\\python赋给dir
运行结果如下:
D:\st13\python
D:\st13\python\1.10
D:\st13\python\1.10\zuoye1.py #滚动的广告屏幕
D:\st13\python\1.10\zuoye2.py #字符串的格式化
D:\st13\python\1.10\zuoye3.py #位运算 & | ^(异或) ~(取反) >> <<
D:\st13\python\1.10\zuoye4.py #统计一句话中数字、字母、汉字出现的次数
D:\st13\python\1.10\zuoye5.py #分支语句的练习
D:\st13\python\1.11
D:\st13\python\1.11\zuoye1.py #for、while以及多层循环
D:\st13\python\1.11\zuoye2.py #控制循环break、continue、else的使用
D:\st13\python\1.11\zuoye3.py #元组的用法 判断某天是这一年的第几天
D:\st13\python\1.11\zuoye4.py #列表的用法---学生成绩管理系统
D:\st13\python\1.14
D:\st13\python\1.14\zuoye1.py #集合的基本用法
D:\st13\python\1.14\zuoye2.py #字典的基本用法
D:\st13\python\1.14\zuoye3.py #使用字典获取12306车站信息
D:\st13\python\1.14\zuoye4.py #统计12306所有全拼重复的车站信息
D:\st13\python\1.15
D:\st13\python\1.15\zuoye1.py #函数的定义及使用
D:\st13\python\1.15\zuoye2.py # 变量作用范围
D:\st13\python\1.15\zuoye3.py #变量与不变量
D:\st13\python\1.16
D:\st13\python\1.16\hcz.py #使用字典获取12306车站信息
D:\st13\python\1.16\zuoye1.py #匿名函数和高阶函数
D:\st13\python\1.16\zuoye2.py #异常处理
D:\st13\python\1.16\zuoye3.py #断言
D:\st13\python\1.16\zuoye4.py #日志模块