最近在学习python,之前一直用的c和c++,动态语言很少接触,虽然此前有开始学过python,但是没坚持下来,因为觉得工作中比没有用到的,很容易忘。这次决定再次学习,然后再写个项目熟练一下。下面就是自己学习过程中遇到的练习题的实现。
题目要求:实现 dir 的功能
import os
import time
input_str = input(">>").split()
if input_str[0] == 'dir':
abs_path = os.path.abspath('.')
dir_list = os.listdir('.')
for i in dir_list:
fpath = os.path.join(abs_path,i)
fsize = os.path.getsize(fpath)
fctime = time.gmtime(os.path.getctime(fpath))
ftimestamp = time.strftime('%Y/%m/%d %H:%M:%S',fctime)
if os.path.isfile(fpath):
if_dir = ' '
else:
if_dir = '<DIR>'
print(ftimestamp,fsize,if_dir,i,'\n')
题目要求:编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径
import os
def find_in_dir(abs_path, cur_dir, input_str, find_dic):
temp_path = os.path.join(abs_path,cur_dir,'.')
dir_list = os.listdir(temp_path)
for filestr in dir_list:
fpath = os.path.join(abs_path,cur_dir,filestr)
if os.path.isfile(fpath):
if input_str in filestr:
find_dic[cur_dir] = filestr
else:
temp_dir = os.path.join(cur_dir,filestr)
find_in_dir(abs_path, temp_dir, input_str, find_dic)
if __name__ == '__main__':
input_str = input("请输入您要查找的文件:")
abs_path = os.path.abspath('.')
find_dic = {}
find_in_dir(abs_path, '', input_str, find_dic)
if len(find_dic) == 0:
print("未找到您要搜索的文件!")
else:
print("搜索到%d个文件:\n"%len(find_dic))
for x in find_dic.keys():
print(x,'\t',find_dic[x])
这个里面用到了递归,整体的思路很简单,但是由于对python各个函数不熟悉,花了1个多小时调试。其中递归函数里的参数名,不能原本传进去,像abd_path,input_str这种两个不变的无所谓,但是cur_dir如果不用temp_dir替换的话,就会有问题。python里面的传参还是有点不了解,c和c++的话不管是不是一样,只要传进去的不是地址类的就不会有问题。
这里比较偷懒,默认认为文件名包括后缀,如果认为文件名不包括的后缀的话,自行处理查找的地方