鱼C论坛

 找回密码
 立即注册
查看: 2232|回复: 4

[已解决]初学python 求助 如何解决文件拒绝访问

[复制链接]
发表于 2018-9-5 01:10:40 | 显示全部楼层 |阅读模式
30鱼币
我是看零基础学python教程自学的,今天刚好看到第30讲文件系统的时候想写一个关于文件搜索的代码,结果有很多地方都出错逻辑怪怪的
大部分解决了,现在出现了几个问题,想问怎么解决?
1、访问错误的问题,错误如图所示
QQ图片20180905010255.png
可以看到百度搜索中那个测试访问权限的os.access(path.mode)方法并不好用
2、我判断是否是文件还是目录的方法用的是pathllib的内置方法,感觉很繁琐,有没有改进的方法,之前用的os.splitext('.'),没想到电脑里面居然有没有扩展名的文件,还有在名字里面加 ‘.‘  的文件,我很气愤,然后挂了
3、我感觉自己在文件递归的时候那个判断条件有点问题,逻辑怪怪的,有没有啥改进的办法

问题有点多,所以给出我珍藏的30鱼币啦!!!
import os
import pathlib

name = input('请输入要搜索的文件名:')
route = input('请输入要搜索的路径:')
save = []


def find_file(name,file_list):
    for file in file_list:
        if name in file:#判断是否有要搜索的文件,保存在新的列表中
            dirname = os.path.dirname(os.getcwd())
            save.append(dirname+file)

def loop(name,curdir,pardir=0):
    if os.access(curdir,os.R_OK):
        os.chdir(curdir)
        file_list = os.listdir(os.getcwd())
        print('\n')
        print(os.getcwd(),end = '\n\n')
        find_file(name,file_list)
        dirname = os.getcwd()
        folder =[]
        for file in file_list:
            file_path = dirname+'\\'+file
            path = pathlib.Path(file_path)
            print(path)
            print(path.is_dir())
            if  path.is_dir():
                folder.append(file)
                
        if folder == []:
            if pardir ==0:
                return None
            else:
                return os.chdir('..')
        else:
            for subdir in folder:
                print(subdir,curdir,pardir)
                loop(name,subdir,curdir)
    else:
        return os.chdir('..')

loop(name,route+'\\')
            
for file_maybe in save:
    print(file_maybe)
最佳答案
2018-9-5 01:10:41
本帖最后由 jackz007 于 2018-9-5 18:36 编辑

    没有什么好办法,把程序中出错的语句加到 try ... except 语句块中。
import os
import pathlib

name = input('请输入要搜索的文件名:')
route = input('请输入要搜索的路径:')
save = []


def find_file(name,file_list):
    for file in file_list:
        if name in file:#判断是否有要搜索的文件,保存在新的列表中
            dirname = os.path.dirname(os.getcwd())
            save.append(dirname+file)

def loop(name,curdir,pardir=0):
    f = false
    if os.access(curdir,os.R_OK) and os.access(curdir,os.X_OK):
        try:
            os.chdir(curdir)
            f = true
        except:
            pass
    if f:
        file_list = os.listdir(os.getcwd())
        print('\n')
        print(os.getcwd(),end = '\n\n')
        find_file(name,file_list)
        dirname = os.getcwd()
        folder =[]
        for file in file_list:
            file_path = dirname+'\\'+file
            path = pathlib.Path(file_path)
            print(path)
            print(path.is_dir())
            if  path.is_dir():
                folder.append(file)
                
        if folder == []:
            if pardir ==0:
                return None
            else:
                return os.chdir('..')
        else:
            for subdir in folder:
                print(subdir,curdir,pardir)
                loop(name,subdir,curdir)
    else:
        return os.chdir('..')

loop(name,route+'\\')
            
for file_maybe in save:
    print(file_maybe)

    搜索文件你为什么不用现成的 os . walk() ,可以大幅度简化你的代码,不妨参考一下有关资料。

最佳答案

查看完整内容

没有什么好办法,把程序中出错的语句加到 try ... except 语句块中。 搜索文件你为什么不用现成的 os . walk() ,可以大幅度简化你的代码,不妨参考一下有关资料。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-5 01:10:41 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2018-9-5 18:36 编辑

    没有什么好办法,把程序中出错的语句加到 try ... except 语句块中。
import os
import pathlib

name = input('请输入要搜索的文件名:')
route = input('请输入要搜索的路径:')
save = []


def find_file(name,file_list):
    for file in file_list:
        if name in file:#判断是否有要搜索的文件,保存在新的列表中
            dirname = os.path.dirname(os.getcwd())
            save.append(dirname+file)

def loop(name,curdir,pardir=0):
    f = false
    if os.access(curdir,os.R_OK) and os.access(curdir,os.X_OK):
        try:
            os.chdir(curdir)
            f = true
        except:
            pass
    if f:
        file_list = os.listdir(os.getcwd())
        print('\n')
        print(os.getcwd(),end = '\n\n')
        find_file(name,file_list)
        dirname = os.getcwd()
        folder =[]
        for file in file_list:
            file_path = dirname+'\\'+file
            path = pathlib.Path(file_path)
            print(path)
            print(path.is_dir())
            if  path.is_dir():
                folder.append(file)
                
        if folder == []:
            if pardir ==0:
                return None
            else:
                return os.chdir('..')
        else:
            for subdir in folder:
                print(subdir,curdir,pardir)
                loop(name,subdir,curdir)
    else:
        return os.chdir('..')

loop(name,route+'\\')
            
for file_maybe in save:
    print(file_maybe)

    搜索文件你为什么不用现成的 os . walk() ,可以大幅度简化你的代码,不妨参考一下有关资料。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
RIXO + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-9-5 16:53:04 | 显示全部楼层
啊啊啊,没有人吗?冒个泡别让贴子沉啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-9-5 19:02:50 | 显示全部楼层
jackz007 发表于 2018-9-5 18:07
没有什么好办法,把程序中出错的语句加到 try ... except 语句块中。

。。。。不用walk是我不知道啊!!!不过这是个好思路啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-9-5 19:39:18 | 显示全部楼层
jackz007 发表于 2018-9-5 18:07
没有什么好办法,把程序中出错的语句加到 try ... except 语句块中。

试了一下,果然好用!完美避免了os.listdir()瞎jb读文件的弊病。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-9 18:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表