Python使用os模块和fileinput模块来操作文件目录


Posted in Python onJanuary 19, 2016

os模块
在python编程中,我们会经常使用到文件和目录,这些操作python提供一个os模块,里面有很多操作文件和目录的函数.

下面介绍os的常用功能

1.获取当前路径

>>> os.getcwd()
'/root/python'

2.获取目录中的内容

>>> os.listdir(os.getcwd())
['deco.py', '6.py', 'inputfile.py', 'uniFile.py', 'oddnogen.py', 'ospathex.py', 'operate.py', 'bianliang.py', 'typecheck1.py']

3.创建目录

>>> os.mkdir('/root/pythontest')

   一次性创建嵌套目录可使用os.makedirs,makedirs可以生成多层递归目录,removedirs可以删除多层递归的空目录,若目录中有文件则无法删除;os.system():运行shell命令;

>>> os.environ['HOME']
'/root'
>>> os.makedirs(os.path.join(os.environ['HOME'],'test','py'))
>>> os.system('ls -lR /root/test')
/root/test:
total 4
drwxr-xr-x 2 root root 4096 2013-03-29 17:27 py
 
/root/test/py:
total 0
0

4.改变工作目录

>>> os.getcwd()
'/root/python'
>>> os.chdir('/etc')
>>> os.getcwd()
'/etc'

5.删除目录

>>> os.rmdir('/root/pythontest')
>>>

注:删除目录必须是空目录

6.删除文件

>>> os.remove('/root/pytest.py')

7.重命名文件或者目录

>>> os.rename('/root/pytest.py','/root/test.py')

8.字符串给出当前平台使用的终止符,例如:Windows使用'\r\n',Linux使用'\n'

>>> os.linesep
'\n'

以下是os.path模块

9.判断是否是目录

>>> os.path.isdir('/root/python')
True

10.判断是否为文件

>>> os.path.isfile('/root/python')
False

11.返回一个路径的目录名和文件名

>>> os.path.split(os.getcwd())
('/root', 'python')

12.判断是否存在文件或目录name

>>> os.path.exists('/root')
True
>>> os.path.exists('/root/1.py')
False

13.获得文件大小

>>> os.path.getsize('/root/python/if.py')
282

14.返回文件路径,返回文件名

>>> os.path.dirname('/root/python/if.py')
'/root/python'
>>> os.path.basename('/root/python/if.py')
'if.py'

15.连接目录与文件名或目录

>>> os.path.join('/dave/test/','1.py')
'/dave/test/1.py'

判断一个目录里哪些是文件哪些是目录.

>>> for file in os.listdir('/root/python'):
...   if os.path.isdir(file):
...     print file,"is a directory"
...   else:
...     print file,"is a file"
... 
deco.py is a file
inputfile.py is a file
operate.py is a file
hello.pyc is a file
userpw.py is a file
4.py is a file
answer is a directory

fileinput模块
fileinput模块可以遍历文本文件的所有行.它的工作方式和readlines很类似,不同点在于,它不是将全部的行读到列表中而是创建了一个xreadlines对象.

下面是fileinput模块中的常用函数

  • input() #它会返回能够用于for循环遍历的对象.
  • filename() #返回当前文件的名称
  • lineno() #返回当前(累计)的行数
  • filelineno() #返回当前文件的行数
  • isfirstline() #检查当前行是否是文件的第一行
  • close() #关闭序列
>>> import fileinput
>>> for eachline in fileinput.input("/root/datafile.txt"):
...   print eachline
... 
Dave
 
python
 
>>> for eachline in fileinput.input("/root/datafile.txt"):
...   print fileinput.filename()
... 
/root/datafile.txt
/root/datafile.txt
>>> for eachline in fileinput.input("/root/datafile.txt"):
...   print fileinput.lineno(),eachline
... 
1 Dave
 
2 python
 
>>> for eachline in fileinput.input("/root/datafile.txt"):
...   if fileinput.isfirstline():
...     print eachline
...   else:
...     break
... 
Dave

下面是一个关于日志分析的小实例,将日志中截取匹配的电话号码,如800-333-1212

root@10.1.1.45:~# cat telphone.log 
027-987-1212
02187899682
021-110-9632
root@10.1.1.45:~# cat fileinputtest.py 
#!/usr/bin/python2.5
 
import fileinput
import sys
import re
 
pattern = "\d{3}-\d{3}-\d{4}"
filePath = "/root/telphone.log"
 
for eachline in fileinput.input(filePath):
  a = re.search(pattern,eachline)
  if a:
#    sys.stdout.write("============\n")
#    sys.stdout.write(eachline)
     print "============"
     print 'line:',fileinput.lineno(),'filename:',fileinput.filename(),'length:',len(eachline.strip('\n')),eachline
root@10.1.1.45:~# ./fileinputtest.py 
============
line: 1 filename: /root/telphone.log length: 12 027-987-1212
 
============
line: 3 filename: /root/telphone.log length: 12 021-110-9632
Python 相关文章推荐
Python读写Excel文件方法介绍
Nov 22 Python
Python验证企业工商注册码
Oct 25 Python
Python网络爬虫与信息提取(实例讲解)
Aug 29 Python
python机器学习之贝叶斯分类
Mar 26 Python
Opencv实现抠图背景图替换功能
May 21 Python
在cmd中查看python的安装路径方法
Jul 03 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
Jul 23 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
Sep 23 Python
Python是什么 Python的用处
May 26 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
Jun 10 Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 #Python
python结合API实现即时天气信息
Jan 19 #Python
Python+django实现文件下载
Jan 17 #Python
Python+django实现文件上传
Jan 17 #Python
初步剖析C语言编程中的结构体
Jan 16 #Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
Jan 16 #Python
python实现发送和获取手机短信验证码
Jan 15 #Python
You might like
php正则表达式(regar expression)
2011/09/10 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
2012/06/07 PHP
PHP获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
PHP获取MySql新增记录ID值的3种方法
2014/06/24 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
jQuery中:nth-child选择器用法实例
2014/12/31 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
2016/12/14 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
webpack4+react多页面架构的实现
2018/10/25 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
python实现在pickling的时候压缩的方法
2014/09/25 Python
Python smallseg分词用法实例分析
2015/05/28 Python
python字典基本操作实例分析
2015/07/11 Python
详解Python对JSON中的特殊类型进行Encoder
2019/07/15 Python
如何在 Django 模板中输出 "{{"
2020/01/24 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
工商管理实习生自我鉴定范文
2013/12/18 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
高中议论文(范文2篇)
2019/08/19 职场文书
Spring Boot 排除某个类加载注入IOC的操作
2021/08/02 Java/Android
MySQL Shell import_table数据导入的实现
2021/08/07 MySQL
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python