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批量下载图片的三种方法
Apr 22 Python
Python类的定义、继承及类对象使用方法简明教程
May 08 Python
Python3实现从文件中读取指定行的方法
May 22 Python
深入讲解Python中面向对象编程的相关知识
May 25 Python
Python 批量合并多个txt文件的实例讲解
May 08 Python
用Python配平化学方程式的方法
Jul 20 Python
python3 mmh3安装及使用方法
Oct 09 Python
解决tensorflow打印tensor有省略号的问题
Feb 04 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
Apr 16 Python
如何利用Python识别图片中的文字
May 31 Python
详解在Python中使用Torchmoji将文本转换为表情符号
Jul 27 Python
Ubuntu权限不足无法创建文件夹解决方案
Nov 14 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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
php与java通过socket通信的实现代码
2013/10/21 PHP
php二维码生成以及下载实现
2017/09/28 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
基于Javascript实现弹出页面效果
2016/01/01 Javascript
详解JS面向对象编程
2016/01/24 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
让Vue也可以使用Redux的方法
2018/05/23 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
2019/12/04 Javascript
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
教你用Python脚本快速为iOS10生成图标和截屏
2016/09/22 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
Python利用matplotlib做图中图及次坐标轴的实例
2019/07/08 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
房地产项目建议书
2014/03/12 职场文书
经典婚礼主持词
2014/03/13 职场文书
化学专业自荐信
2014/05/28 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
浅谈JavaScript作用域
2021/12/06 Javascript