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模块中的常用函数
>>> 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