os模块
在python编程中,我们会经常使用到文件和目录,这些操作python提供一个os模块,里面有很多操作文件和目录的函数.
下面介绍os的常用功能
1.获取当前路径
1
2
|
>>> os.getcwd() '/root/python' |
2.获取目录中的内容
1
2
|
>>> os.listdir(os.getcwd()) [ 'deco.py' , '6.py' , 'inputfile.py' , 'uniFile.py' , 'oddnogen.py' , 'ospathex.py' , 'operate.py' , 'bianliang.py' , 'typecheck1.py' ] |
3.创建目录
1
|
>>> os.mkdir( '/root/pythontest' ) |
一次性创建嵌套目录可使用os.makedirs,makedirs可以生成多层递归目录,removedirs可以删除多层递归的空目录,若目录中有文件则无法删除;os.system():运行shell命令;
1
2
3
4
5
6
7
8
9
10
11
|
>>> 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.改变工作目录
1
2
3
4
5
|
>>> os.getcwd() '/root/python' >>> os.chdir( '/etc' ) >>> os.getcwd() '/etc' |
5.删除目录
1
2
|
>>> os.rmdir( '/root/pythontest' ) >>> |
注:删除目录必须是空目录
6.删除文件
1
|
>>> os.remove( '/root/pytest.py' ) |
7.重命名文件或者目录
1
|
>>> os.rename( '/root/pytest.py' , '/root/test.py' ) |
8.字符串给出当前平台使用的终止符,例如:Windows使用'\r\n',Linux使用'\n'
1
2
|
>>> os.linesep '\n' |
以下是os.path模块
9.判断是否是目录
1
2
|
>>> os.path.isdir( '/root/python' ) True |
10.判断是否为文件
1
2
|
>>> os.path.isfile( '/root/python' ) False |
11.返回一个路径的目录名和文件名
1
2
|
>>> os.path.split(os.getcwd()) ( '/root' , 'python' ) |
12.判断是否存在文件或目录name
1
2
3
4
|
>>> os.path.exists( '/root' ) True >>> os.path.exists( '/root/1.py' ) False |
13.获得文件大小
1
2
|
>>> os.path.getsize( '/root/python/if.py' ) 282 |
14.返回文件路径,返回文件名
1
2
3
4
|
>>> os.path.dirname( '/root/python/if.py' ) '/root/python' >>> os.path.basename( '/root/python/if.py' ) 'if.py' |
15.连接目录与文件名或目录
1
2
|
>>> os.path.join( '/dave/test/' , '1.py' ) '/dave/test/1.py' |
判断一个目录里哪些是文件哪些是目录.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
>>> 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() #关闭序列
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
>>> 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
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 |