由于工作需要,今日领导交给我一个任务,让我把软件底层这块的所有C文件都一一列出来,程序将根据文件进行RAM的地址分配,考虑到底层这部分的代码文件量大,且该目录下的子文件夹极多,一一列出来,恐怕一上午或者一下午才能列出,而且由于文件多,还不好检查。
正好最近在自学pyhon,想着看看能不能用python简化工作的繁琐,最后有了下面的这段程序。
import os
cFileNumber = 0
dir = 'D://BuildArea//10031799_MT62P3_MiniAPP//10031799_HAL' #指定文件夹的路径
for root, dirs, files in os.walk(dir): #遍历该文件夹
for file in files: #遍历刚获得的文件名files
(filename, extension) = os.path.splitext(file) #将文件名拆分为文件名与后缀
if (extension == '.c'): #判断该后缀是否为.c文件
cFileNumber= cFileNumber+1 #记录.c文件的个数为对应文件号
#print(cFileNumber, os.path.join(root,filename)) #输出文件号以及对应的路径加文件名
print("PLACE_RAM(" + filename + ')') #以PLACE_RAM(文件名)形式输出文件名
上诉代码的分析理解如下:
目的是为了获得指定文件夹下的包括子文件夹下的所有的“.c”文件,思路是,首先遍历整个文件夹以及该文件夹下的子文件夹,从而得到这些文件的文件名,然后将文件名与文件名的后缀进行分离,再将分离的文件名以某种形式输出。
python模块os中的os.walk()函数可以遍历所有文件夹下的所有的文件名,向上或者向下,可以帮助我们简易高效的处理文件以及目录方面的事情,该方法的语法格式如下:
os.walk(top, topdown=True, onerror=None, followlinks=False)
-
top -- 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。
- root 所指的是当前正在遍历的这个文件夹的本身的地址
- dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
- files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
-
topdown --可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。
-
onerror -- 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。
-
followlinks -- 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录。
上述程序中,想要获得任意指定后缀名的文件名,只需将程序中的'.c'改成期望的后缀即可。