鱼C论坛

 找回密码
 立即注册
查看: 2210|回复: 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鱼币啦!!!


  1. import os
  2. import pathlib

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


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

  11. def loop(name,curdir,pardir=0):
  12.     if os.access(curdir,os.R_OK):
  13.         os.chdir(curdir)
  14.         file_list = os.listdir(os.getcwd())
  15.         print('\n')
  16.         print(os.getcwd(),end = '\n\n')
  17.         find_file(name,file_list)
  18.         dirname = os.getcwd()
  19.         folder =[]
  20.         for file in file_list:
  21.             file_path = dirname+'\\'+file
  22.             path = pathlib.Path(file_path)
  23.             print(path)
  24.             print(path.is_dir())
  25.             if  path.is_dir():
  26.                 folder.append(file)
  27.                
  28.         if folder == []:
  29.             if pardir ==0:
  30.                 return None
  31.             else:
  32.                 return os.chdir('..')
  33.         else:
  34.             for subdir in folder:
  35.                 print(subdir,curdir,pardir)
  36.                 loop(name,subdir,curdir)
  37.     else:
  38.         return os.chdir('..')

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

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


  1. import os
  2. import pathlib

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


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

  11. def loop(name,curdir,pardir=0):
  12.     f = false
  13.     if os.access(curdir,os.R_OK) and os.access(curdir,os.X_OK):
  14.         try:
  15.             os.chdir(curdir)
  16.             f = true
  17.         except:
  18.             pass
  19.     if f:
  20.         file_list = os.listdir(os.getcwd())
  21.         print('\n')
  22.         print(os.getcwd(),end = '\n\n')
  23.         find_file(name,file_list)
  24.         dirname = os.getcwd()
  25.         folder =[]
  26.         for file in file_list:
  27.             file_path = dirname+'\\'+file
  28.             path = pathlib.Path(file_path)
  29.             print(path)
  30.             print(path.is_dir())
  31.             if  path.is_dir():
  32.                 folder.append(file)
  33.                
  34.         if folder == []:
  35.             if pardir ==0:
  36.                 return None
  37.             else:
  38.                 return os.chdir('..')
  39.         else:
  40.             for subdir in folder:
  41.                 print(subdir,curdir,pardir)
  42.                 loop(name,subdir,curdir)
  43.     else:
  44.         return os.chdir('..')

  45. loop(name,route+'\\')
  46.             
  47. for file_maybe in save:
  48.     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 语句块中。


  1. import os
  2. import pathlib

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


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

  11. def loop(name,curdir,pardir=0):
  12.     f = false
  13.     if os.access(curdir,os.R_OK) and os.access(curdir,os.X_OK):
  14.         try:
  15.             os.chdir(curdir)
  16.             f = true
  17.         except:
  18.             pass
  19.     if f:
  20.         file_list = os.listdir(os.getcwd())
  21.         print('\n')
  22.         print(os.getcwd(),end = '\n\n')
  23.         find_file(name,file_list)
  24.         dirname = os.getcwd()
  25.         folder =[]
  26.         for file in file_list:
  27.             file_path = dirname+'\\'+file
  28.             path = pathlib.Path(file_path)
  29.             print(path)
  30.             print(path.is_dir())
  31.             if  path.is_dir():
  32.                 folder.append(file)
  33.                
  34.         if folder == []:
  35.             if pardir ==0:
  36.                 return None
  37.             else:
  38.                 return os.chdir('..')
  39.         else:
  40.             for subdir in folder:
  41.                 print(subdir,curdir,pardir)
  42.                 loop(name,subdir,curdir)
  43.     else:
  44.         return os.chdir('..')

  45. loop(name,route+'\\')
  46.             
  47. for file_maybe in save:
  48.     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-5-5 19:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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