(Python) 判断指定路径下的文件是文件夹还是文件的方法(指出常见错误)

前言

        在学习os模块及os.path模块相关函数使用时,为了稍微深入掌握下(其实也没想太深入),就做了几道题,于是就遇到了这么一个问题,第一次解决我认为这不是问题,第二次稍微有所不同,就发现第一次解决的方案有局限性,于是网上查找解决之道,发现这块儿资料文章很差劲(自己没咋搜到),自己好好思索了一番,找到了解决之道,记录下来,以供参考。

问题及解决

        关于判断指定路径下的文件是文件还是文件夹用的是os.path模块中的isdir(path)即判断指定路径是否存在且是一个目录,但有个问题,就是python源文件所在路径就是当前工作路径,换言之,就是pyhon源文件如果在你要判断的那个路径下,你就不用更改当前工作路径,说的有点不好理解,就举实例说明

写了个名为test7的py文件,源代码如下:

import os
def test_folder():
    path = input('请输入待查找的初始目录:')
    files_list = os.listdir(path)
    print(os.getcwd())
    for file in files_list:
        print(file)
        if(os.path.isdir(file)):
            print('有文件夹')

if __name__ == '__main__':
    test_folder()

保存路径如下:     

 要检测的就是D:\test路径下是否有文件夹,运行结果如下             

 但是如果把test7.py文件移出该路径,保存到D:\study\python_demo路径下,那么运行结果如下        

 通过这个案例可以知道运行的python源文件所在路径就是当前工作路径,而使用os.path.isdir()函数判断文件是文件还是文件夹时的路径必须是当前路径才能生效,所以做如下修改

import os
def test_folder():
    path = input('请输入待查找的初始目录:')
    os.chdir(path) # 更改当前目录
    files_list = os.listdir(path)
    print(os.getcwd())
    for file in files_list:
        print(file)
        if(os.path.isdir(file)):
            print('有文件夹')

if __name__ == '__main__':
    test_folder()

运行结果如下        

升华

        这个问题的发现是遇到如下这题发现的

        编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索,程序实现如图:

         

  程序实现如下:

import os
def search_route():
    path = input('请输入待查找的初始目录:')
    f_name = input('请输入需要查找的目标文件:')
    os.chdir(path)
    files_list = os.listdir(os.getcwd())
    for file in files_list:
        os.chdir(path)
        if(os.path.isdir(file)):
            path1 =path+'\\'+ file
            os.chdir(path1)
            f_list = os.listdir(os.getcwd())
            for f in f_list:
                if(os.path.isdir(f)):
                    path2 =os.getcwd()+ '\\'+f
                    os.chdir(path2)
                    f_list_i = os.listdir(os.getcwd())
                    for f_i in f_list_i:
                        if f_i == f_name:
                            print(path2 +'\\'+f_name)
                else:
                    if f == f_name:
                        print(path1+'\\'+f_name)
        else:
            if file == f_name:
                print(path+'\\'+f_name)

if __name__ == '__main__':
    search_route()
                        

程序有些瑕疵,搜索只搜索了2层,但要实现的思路大致没有问题

小结

        这个问题走了不小的弯路,一直不知道哪里有问题,一层层深挖才找到了问题所在,网上也没有现成可借鉴的,凄惨,总归还是解决了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值