鱼C论坛

 找回密码
 立即注册
查看: 2203|回复: 5

[已解决]《零基础入门学习python》第30讲课后练习

[复制链接]
发表于 2017-10-19 17:55:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 铁棍阿童木 于 2017-10-19 17:57 编辑

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

我没看小甲鱼的代码之前,是用一种非常暴力的方法,代码如下:

  1. import os

  2. obj_dir = input("请输入待查找的初始目录:")
  3. obj_file = input("请输入需要查找的目标文件:")
  4. if os.path.isdir(obj_dir):        # 确保目标存在且是一个文件夹

  5.     # 用os.walk()遍历目标目录下的所有子目录,并返回一个包含三个元素的元组对象(所需文件必然在其中一个元组内)
  6.     for file_group in os.walk(obj_dir):        
  7.         for each in range(len(file_group)):
  8.             if obj_file in file_group[each]:
  9.                 print(file_group[0] + os.sep + obj_file)
复制代码


其实就是用os.wolk( )方法遍历目标目录下的所有子目录,她会返回一个包含三个元素的元组对象,第一个元素是当前目录,第二个是当前目录下的其他目录、第三个是当前目录下的所有文件。所以要查找的文件必然在其中一个元组的元素中,所以,就看目标文件是否包含在元组里面,找到后再把完整路径打印到屏幕。

目前执行来看都没问题,跟小甲鱼的代码执行结果是一样的。但是心里觉得这种方法是不是有什么隐患啊。感觉不踏实。哈哈,请高人路过指点一二,因为我不是搞IT的,所以才会这么问。

最佳答案
2017-12-4 00:09:00
附上代码:
import os

obj_dir = input("请输入待查找的初始目录:")
obj_file = input("请输入需要查找的目标文件:")

if os.path.isdir(obj_dir):        # 确保目标存在且是一个文件夹

    # 用os.walk()遍历目标目录下的所有子目录,并返回一个包含三个元素的元组对象(所需文件必然在其中一个元组内)
    for file_group in os.walk(obj_dir):
        if obj_file in file_group[2]:   #既然知道元组里面存放的元素顺序,直接搜索file_group[2]即可。
            print(file_group[0] + os.sep + obj_file)
111.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-10-19 21:54:28 | 显示全部楼层
这些题目不会涉及安全隐患。
不过是你和小甲鱼老师答间的效率不同罢了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-19 23:19:56 | 显示全部楼层
新手·ing 发表于 2017-10-19 21:54
这些题目不会涉及安全隐患。
不过是你和小甲鱼老师答间的效率不同罢了。

谁的代码效率更高
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 00:07:45 | 显示全部楼层

用两个循环,效率估计会低些。
看了一下程序,改成一个循环,用时少一些。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 00:09:00 | 显示全部楼层    本楼为最佳答案   
附上代码:
import os

obj_dir = input("请输入待查找的初始目录:")
obj_file = input("请输入需要查找的目标文件:")

if os.path.isdir(obj_dir):        # 确保目标存在且是一个文件夹

    # 用os.walk()遍历目标目录下的所有子目录,并返回一个包含三个元素的元组对象(所需文件必然在其中一个元组内)
    for file_group in os.walk(obj_dir):
        if obj_file in file_group[2]:   #既然知道元组里面存放的元素顺序,直接搜索file_group[2]即可。
            print(file_group[0] + os.sep + obj_file)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 00:11:13 | 显示全部楼层
另外,简单统计代码运行时间的代码如下,欢迎提供更佳方法。(此方法统计出的时间好像跟电脑本身性能相关)
import time

start = time.clock()         

#当中是你的程序

elapsed = (time.clock() - start)
print("Time used:",elapsed)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-3 06:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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