Python练习


  最近在学习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++的话不管是不是一样,只要传进去的不是地址类的就不会有问题。

     这里比较偷懒,默认认为文件名包括后缀,如果认为文件名不包括的后缀的话,自行处理查找的地方



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值