Python使用os模块和fileinput模块来操作文件目录
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: total4 drwxr-xr-x2rootroot40962013-03-2917:27py /root/test/py: total0 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'
判断一个目录里哪些是文件哪些是目录.
>>>forfileinos.listdir('/root/python'): ...ifos.path.isdir(file): ...printfile,"isadirectory" ...else: ...printfile,"isafile" ... deco.pyisafile inputfile.pyisafile operate.pyisafile hello.pycisafile userpw.pyisafile 4.pyisafile answerisadirectory
fileinput模块
fileinput模块可以遍历文本文件的所有行.它的工作方式和readlines很类似,不同点在于,它不是将全部的行读到列表中而是创建了一个xreadlines对象.
下面是fileinput模块中的常用函数
- input()#它会返回能够用于for循环遍历的对象.
- filename()#返回当前文件的名称
- lineno()#返回当前(累计)的行数
- filelineno()#返回当前文件的行数
- isfirstline()#检查当前行是否是文件的第一行
- close()#关闭序列
>>>importfileinput >>>foreachlineinfileinput.input("/root/datafile.txt"): ...printeachline ... Dave python >>>foreachlineinfileinput.input("/root/datafile.txt"): ...printfileinput.filename() ... /root/datafile.txt /root/datafile.txt >>>foreachlineinfileinput.input("/root/datafile.txt"): ...printfileinput.lineno(),eachline ... 1Dave 2python >>>foreachlineinfileinput.input("/root/datafile.txt"): ...iffileinput.isfirstline(): ...printeachline ...else: ...break ... Dave
下面是一个关于日志分析的小实例,将日志中截取匹配的电话号码,如800-333-1212
root@10.1.1.45:~#cattelphone.log 027-987-1212 02187899682 021-110-9632 root@10.1.1.45:~#catfileinputtest.py #!/usr/bin/python2.5 importfileinput importsys importre pattern="\d{3}-\d{3}-\d{4}" filePath="/root/telphone.log" foreachlineinfileinput.input(filePath): a=re.search(pattern,eachline) ifa: #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:1filename:/root/telphone.loglength:12027-987-1212 ============ line:3filename:/root/telphone.loglength:12021-110-9632