解决思路

对于像我这种刚开始入门计算机的人,解决问题最关键的是思路的学习,很多时候代码,一看就懂,一写就废。

像这个题目,我们可以用程序的思维,一步一步去解决,将问题细分,细分成你能够解决的问题然后再处理问题,这样看似一个无法下手的题目,就变得可以下手

搜索出当前目录下的文件(不包括子目录的文件),并打印文件名

搜索出当前目录下的所有文件(包括子目录的文件),并打印文件名

搜索出当前目录下的所有文件(包括子目录的文件),并打印文件名包含指定字符串的文件

搜索出当前目录下的所有包含指定字符串的文件(包括子目录的文件),并打印相对路径

然后开始一个问题一个问题地解决:

解决第一问题:

搜索出当前目录下的文件(不包括子目录的文件),并打印文件名

import os

def search_file(path):

for x in os.listdir(path):#遍历当前目录下的所有内容,包括文件和子目录

next_file=os.path.join(path,x)

if os.path.isfile(next_file):#筛选出文件

print(x)

p=input('输入指定当前目录:')

search_file(p)

记得找个路径测试一下。

>>>

============================= RESTART: C:\日常学习代码.py ============================

输入指定当前目录:C:\Users\易鹏\Documents\文件夹

1.pdf

Drawing2-模型.pdf

GB 51251-2017建筑防烟排烟系统技术标准(正式版).pdf

plot.log

ThisWorkbook.cls

{三维}2.jpg

体量.rfa

原理图.dwg

外装.0001.rvt

外装.0002.rvt

外装.0003.rvt

外装.0004.rvt

外装.rvt

屋顶大样.pdf

屋顶平面.pdf

屋顶设计图.dwg

建筑上标高.rfa

建筑标高.rfa

徐州地铁3号线项目返场人员花名册日报表(1).xlsx

微信图片_20190802112018.jpg

第1页.pdf

第2页.pdf

算量模板.xlsx

行列高光显示.bas

>>>

解决第二个问题

搜索当前目录下所有文件(包括子目录中的文件),并打印文件名

这个问题是关键的问题,也是比较难的一点,我们想目录下面可能有子目录,子目录下面可能还有子目录,这时我们只有用递归去解决或者使用循环去解决,因为我们没法知道有多少级目录。

首先,理解比较好理解的递归函数。在一个问题中,我们写出了一个程序,功能是输入目录,输出目录下的所有文件名,那么用递归就很方便了,直接上代码:(解决根问题后,我们再将循环的方法)

import os

def search_file(path):

for x in os.listdir(path):

next_path=os.path.join(path,x)

if os.path.isfile(next_path):

print(x)

else:

search_file(next_path)

p=input('输入指定当前目录:')

search_file(p)

解决第三个问题

搜索出当前目录下的所有文件(包括子目录的文件),并打印文件名包含指定字符串的文件

因为我们打印的文件名其实是以字符串的方式存储的,所以解决这个问题的核心在于怎么判断一个字符串包含某个字符或者字符串。其实这里非常简单,举个例子:

>>> 'ab' in 'abc'

True

>>>

看到例子就恍然大悟,原来用逻辑判断in就可以做到,刚开始没想到这个主是因为没有意识到一个小小的字符逻辑操作竟然有这么大的威力。

知道了核心,我们直接上代码:

import os

def search_file(path,str):

for x in os.listdir(path):

next_path=os.path.join(path,x)

if os.path.isfile(next_path):

if str in x:

print(x)

else:

search_file(next_path,str)

p=input('输入指定当前目录:')

str=input('输入指定字符串或字符:')

search_file(p,str)

运行结果:

>>>

============================= RESTART: C:\日常学习代码.py ============================

输入指定当前目录:C:\Users\易小白\Documents\文件夹

输入指定字符串或字符:图

#运行结果:

图片1.png

总图简图.jpg

原理图.dwg

屋顶设计图.dwg

微信图片_20190802112018.jpg

>>>

第四个问题

搜索出当前目录下的所有包含指定字符串的文件(包括子目录的文件),并打印相对路径

解决这个问题的关键,在于怎么打印相对路径,什么是相对路径;

相对路径是一个不难理解的概念,比如你打开了一个文件目录,里面有一个‘测试’文件夹,这个文件夹有一个‘test.txt’文件,那么这个文件对于文件目录来说相对路径就是“测试\test.txt”

那么如何打印相对路径呢,我们发现相对路径等于文件的绝对路径减去当前目录的路径,我们可以通过字符操作达到目的,但是需要很多行代码,还好python的os模块中,有一个os.path.relpath(abspath,path)功能,这个功能就是打印绝对路径的功能。

功能演示:

>>> os.path.relpath('C:\\Windows', 'C:\\')

'Windows'

我们看出功能就是去掉路径的相同部分,留下来的就是绝对路径,当然这个函数只能用来操作路径,不能操作普通字符。

上最终的代码:

import os

def search_file(path,str):

for x in os.listdir(path):

next_path=os.path.join(path,x)

if os.path.isfile(next_path):

if str in x:

print(os.path.relpath(next_path,p))#这里使用了固定的变量p,为了增强可读性,可以先定义

else:

search_file(next_path,str)

p=input('输入指定当前目录:')

str=input('输入指定字符串或字符:')

search_file(p,str)

运行结果:

>>>

============================= RESTART: C:\日常学习代码.py ============================

输入指定当前目录:C:\Users\易鹏\Documents\文件夹

输入指定字符串或字符:图

PPT模板\图片1.png

PPT模板\总图简图.jpg

原理图.dwg

屋顶设计图.dwg

微信图片_20190802112018.jpg

>>>

对比第3个问题的结果:文件名有了相对路径

>>>

============================= RESTART: C:\日常学习代码.py ============================

输入指定当前目录:C:\Users\易鹏\Documents\文件夹

输入指定字符串或字符:图

图片1.png

总图简图.jpg

原理图.dwg

屋顶设计图.dwg

微信图片_20190802112018.jpg

>>>

python 当前路径 搜索路径图某一个不包含_python编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径...相关推荐

  1. python 文件和目录 当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径。

    廖雪峰python教程中的<操作文件和目录>下的第二题目的解答, 网址为: http://www.liaoxuefeng.com/wiki/0014316089557264a6b34895 ...

  2. python遍历文件夹下所有文件名中含有指定_Python 遍历目录找出包含指定字符串的文件夹...

    题目:编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径 题目不难,但是初接触Python,对函数不够熟悉,犯了不少错误.总结如下: os.path. ...

  3. python 输入文件名查找_python 查找文件名包含指定字符串的方法

    编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出绝对路径. import os class searchfile(object): def __init__ ...

  4. python 查找文件名包含指定字符串

    编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出绝对路径. import os class SearchFile(object):def __init__( ...

  5. Java黑皮书课后题第4章:*4.6(图上的随机点)编写一个程序,产生一个圆心位于(0,0)原点半径为40的圆上面的三个随机点,显示由这三个随机点组成的三角形的三个角的度数

    *4.6(图上的随机点)编写一个程序,产生一个圆心位于(0,0)原点半径为40的圆上的三个随机点,显示由这三个随机点组成的三角形的三个角的度数 题目 题目概述 破题 代码 题目 题目概述 *4.6(图 ...

  6. Python 读取指定目录及其子目录下所有文件名

    Python 读取指定目录及其子目录下所有文件名 本文博客地址:https://xinancsd.github.io/Python/python_search_folder.html 目标 磁盘中的文 ...

  7. Java黑皮书课后题第9章:*9.6(秒表)设计一个名为StopWatch的类,该类包含……。编写一个测试程序,用于测量使用选择排序对100000个数字进行排序的执行时间

    Java黑皮书课后题第9章:*9.6(秒表)设计一个名为StopWatch的类,该类包含--.编写一个测试程序,用于测量使用选择排序对100000个数字进行排序的执行时间 题目 破题 代码 Test6 ...

  8. 数据结构第5章例题 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。

    [例5.1] 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点.试编写一个算法,找出A中的所有鞍点. 算法如下: void saddl ...

  9. Java黑皮书课后题第7章:**7.18(冒泡排序)使用冒泡排序算法编写一个排序方法。编写一个测试程序,读取10个double型的值,调用这个方法,然后显示排序好的数字

    **7.18(冒泡排序)使用冒泡排序算法编写一个排序方法.编写一个测试程序,读取10个double型的值,调用这个方法,然后显示排序好的数字 题目 题目描述 冒泡排序法 / 下沉排序法 破题 代码 运 ...

最新文章

  1. ceres实现的pnp解算后的位姿优化代码详解
  2. 数字经济时代,算力到底有多重要?
  3. Java:ThreadPoolExecutor解析续--Executors
  4. html for循环正方形,JavaScript for 循环
  5. Win2003下Exchange2003部署图解之七
  6. json转python_将“true”(JSON)转换为Python等效的“True”
  7. PAT (Top Level) Practise 1008 Airline Routes(Tarjan模版题)
  8. 2017-2018-1 20155320 实验三——实时系统
  9. 红皮书--With语句及布尔型
  10. opengl入门6。1
  11. webbrowser设置横向打印_9个Excel打印神技巧!从此打印不求人!
  12. 在django项目中使用django-ckeditor
  13. 实战 | 使用Slack、Docker来打造你的运维机器人
  14. 元旦节前python网络编程趣味小游戏
  15. 5GC核心网之UPF
  16. 网站服务器 发包,如何实现CentOS不停向外发包_网站服务器运行维护,CentOS
  17. php画图抗锯齿,关于抗锯齿的详细介绍
  18. .Net Core过滤器分类
  19. java企业号开发教程_详解java微信企业号开发之开发模式的开启步骤
  20. 解决log4j2子线程无法获取到traceId问题

热门文章

  1. 编译android工程提示error processing kotlin-stdlib-1.6.0.jar
  2. 原创超简单代码(1.25)
  3. 支持python的云虚拟主机价格_万网云虚拟主机密码怎么样,python 购买虚拟主机测评...
  4. 前端开发_HTML5_CSS部分-过渡特效(transition)
  5. API使用步骤及分析
  6. 工作站和塔式服务器有什么区别
  7. DVE14.1.4 安装和破解以及C#运行时弹框正在使用框(Trial)的去掉(CSDN网上资料整合,感谢强大的CSDN)
  8. 完全竞争市场的含义和特征
  9. NPL基于词典分词(一)
  10. 索引失效的10种场景,你知道几个呢?(必知五颗星)