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中stdout输出不缓存的设置方法
May 29 Python
import的本质解析
Oct 30 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
Python GUI库PyQt5图形和特效样式QSS介绍
Feb 25 Python
使用matplotlib动态刷新指定曲线实例
Apr 23 Python
Python实现将元组中的元素作为参数传入函数的操作
Jun 05 Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
Feb 22 Python
Python爬虫基础讲解之请求
May 13 Python
python函数的两种嵌套方法使用
Apr 02 Python
python读取mat文件生成h5文件的实现
Jul 15 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 mail to 配置详解
2014/01/16 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
javascript将数组插入到另一个数组中的代码
2013/01/10 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
微信小程序 loading 详解及实例代码
2016/11/09 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
2016/12/15 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
python实现的各种排序算法代码
2013/03/04 Python
python实现电子词典
2020/04/23 Python
深入理解Python装饰器
2016/07/27 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
2019/09/16 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
Python3 pickle对象串行化代码实例解析
2020/03/23 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
入职担保书怎么写
2014/05/12 职场文书
学校师德师风整改措施
2014/10/27 职场文书
西岭雪山导游词
2015/02/06 职场文书
教师旷工检讨书
2015/08/15 职场文书
党性修养心得体会2016
2016/01/21 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python