python os.path.isfile函数
最近刚开始学习Python,做了个小练习:扫描当前目录及其子目录中的文件,找出文件名中含有指定关键字的文件并打印文件名。思路很简单,如果是文件则判断是否满足条件;如果是目录则进入目录搜索文件,递归。
思路有了那就准备开撸
#!/usr/bin/env python
# -*- coding: utf-8 -*- import os
import sys def search(token):
for file in os.listdir('.'):
if os.path.isfile(file): #如果是文件
if token in file:
print file
elif os.path.isdir(file): #如果是目录
os.chdir(file)
search(token) if __name__ == '__main__':
search(sys.argv[1])
撸完测试,发现结果跟想象的不一样,遇到子目录后就退出了,通过调试发现递归函数返回后再次判断file是否为文件时,结果都是否,后来修改了os.path.isfile函数的参数:在for循环前利用os.getcwd函数获取当前路径并保存,再结合os.path.join函数拼接file形成绝对路径,这样修改后,程序运行结果符合预期。
通过比对分析,问题应该出在os.path.isfile函数处,官方文档上对该函数的说明也比较简略:
os.path.isfile(path)
Return True if path is an existing regular file. This follows symbolic links, so both islink() and isfile() can be true for the same path.
既然对于绝对路径的判断该函数返回结果没问题,而代码中传入的参数是相对(当前)路径的,那说明os.path.isfile函数在处理相对路径的文件时,默认是当前工作目录,恰好代码中再递归调用search函数时修改了当前工作目录,这就导致递归返回后os.path.isfile函数判断结果与预期不符,修改后代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*- import os
import sys def search(token):
pwd = os.getcwd()
for file in os.listdir('.'):
if os.path.isfile(file): #如果是文件
if token in file:
print file
elif os.path.isdir(file): #如果是目录
os.chdir(file)
search(token)
os.chdir(pwd)
if __name__ == '__main__':
search(sys.argv[1])
结论
在调用os.path.isfile函数判断是否为普通文件时,若传入的路径是相对路径,则默认是在当前工作目录下搜索该文件。
python os.path.isfile函数的更多相关文章
- Python os.path模板函数
os.path.abspath(path) #返回绝对路径 os.path.basename(path) #返回文件名 os.path.commonprefix(list) #返回list(多个路径) ...
- python中由于中文路径引起的os.path.isfile(imgpath) == False问题
昨天在用python脚本处理文件的时候,遇到了题述问题,明明文件时存在的,但是在用os.path.isfile(imgpath) == False进行判断的时候总是成立,在一开始以为是正反斜杠wind ...
- Python os.path.dirname(__file__) 与 Python os.path.abspath(__file__) 与 os.system() 函数
Python os.path.dirname(__file__) 与 Python os.path.abspath(__file__) 的区别 os.path.abspath(__file__)返回 ...
- python中spilt()函数和os.path.spilt()函数区别
Python中有split()和os.path.split()两个函数: split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表. os.path.split():将文件 ...
- python 中的split()函数和os.path.split()函数
Python中有split()和os.path.split()两个函数: split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表. os.path.split():将文件 ...
- 【Python】os.path.isfile()的使用方法汇总
方法一: # -*- coding:utf-8 -*- import os import sys from uiautomator import device as d filepath = r'E: ...
- python路径拼接os.path.join()函数的用法
os.path.join()函数:连接两个或更多的路径名组件 1.如果各组件名首字母不包含’/’,则函数会自动加上 2.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃 3.如果最后一个组 ...
- Python OS模块常用函数说明
Python的标准库中的os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Wi ...
- python os.path
os.path 提供了一些处理文件路径的函数. os.path.abspath(path) 返回绝对路径, 在大多数平台上, os.path.abspath(path) == os.path.norm ...
随机推荐
- 优化IIS7.5支持10万个同时请求的配置方法
通过对IIS7的配置进行优化,调整IIS7应用池的队列长度,请求数限制,TCPIP连接数等方面,从而使WEB服务器的性能得以提升,保证WEB访问的访问流畅. IIS7.5是微软推出的最新平台IIS,性 ...
- Cheat Engine(简称CE)初体验
经常玩一些单机游戏,如CS.植物大战僵尸,,这几天刚好网上看到有人用CE修改内存,直接修改内存数据. 之前没有玩过此类东西,激动不已,于是自己也动手写了几行代码, 实现了CS子弹无限制,血量无限,阳光 ...
- 前端学习之jquery(二)
操作元素(属性,css,文档处理) 1.1 属性操作 --------------------------属性 $("").attr(); $("").remo ...
- CentOS 7.x 如何关闭 numa
CentOS7.x中发现 numactl --interleave=all 执行失败. CentOS7.x中可以通过下面的方式关闭 numa: 1. 编辑 /etc/default/grub 文件,如 ...
- UIScrollView的AutoLayout约束
首先UIScrollview包含自身的frame和contentSize二个部分.frame决定其展示给用户的可见区域,contentSize决定其整个内容的大小.如果frame的宽高小于conten ...
- VS2015Git 源代码工具使用
1. 首先到源代码托管平台申请个账户:https://git.oschina.net/ 2.创建流程图: 2.1 开始创建项目: 2.2 3. 4. 作者:江宁织造 qq空间:苦心孤诣博客:http: ...
- gerrit中mysql配置
gerrit数据库使用mysql 进入gerrit数据库 mysql -ugerrit -p -h127.0.0.1 -P3307 密码为用户名加pass mysql> select * fro ...
- 在Ubuntu下编译Qt错误及处理办法
平台:Ubuntu16.04 64bit 虚拟机:VirtualBOX 编译软件:Qt 32bit (在64位环境下编译32bit的程序会出现很多错误,从编译器的安装以及整个库的编译) 问题一:er ...
- 总结:Java 集合进阶精讲2-ArrayList
知识点:Java 集合框架图 总结:Java 集合进阶精讲1 总结:Java 集合进阶精讲2-ArrayList 初探: ArrayList底层结构是数组,是List接口的 可变数组的实现,所以会占用 ...
- PXC5.7(Percona XtraDB Cluster)+HAproxy+Keepalived 集群部署
Percona-XtraDB-Cluster+Haproxy 搭建集群环境 环境准备及服务器信息: 配置防火墙 firewall-cmd --add-port=3306/tcp --permanent ...