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实现周期性抓取网页内容的方法
Nov 04 Python
Python进阶-函数默认参数(详解)
May 18 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
Jun 25 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
django基于restframework的CBV封装详解
Aug 08 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
pyinstaller打包程序exe踩过的坑
Nov 19 Python
使用 pytorch 创建神经网络拟合sin函数的实现
Feb 24 Python
解决django中form表单设置action后无法回到原页面的问题
Mar 13 Python
python 实现仿微信聊天时间格式化显示的代码
Apr 17 Python
Matplotlib.pyplot 三维绘图的实现示例
Jul 28 Python
python 数据类型强制转换的总结
Jan 25 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 静态化实现代码
2009/03/20 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
php实现的漂亮分页方法
2014/04/17 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
2018/08/15 PHP
再谈javascript面向对象编程
2012/03/18 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
理解javascript封装
2016/02/23 Javascript
jQuery EasyUI菜单与按钮详解
2016/07/13 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
WebView启动支付宝客户端支付失败的问题小结
2017/01/11 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
[01:18]PWL开团时刻DAY10——一拳超人
2020/11/11 DOTA
使用Python编写简单的画图板程序的示例教程
2015/12/08 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
解决python3输入的坑——input()
2020/12/05 Python
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
教师研修随笔感言
2014/01/23 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
公证委托书大全
2014/04/04 职场文书
投诉书格式范本
2015/07/02 职场文书
培训感想范文
2015/08/07 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS
Docker部署Mysql8的实现步骤
2022/07/07 Servers