python os模块创建文件_Python使用os模块和fileinput模块来操作文件目录

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:

total4

drwxr-xr-x2 root root4096 2013-03-29 17:27 py

/root/test/py:

total0

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.pyis afile

inputfile.pyis afile

operate.pyis afile

hello.pycis afile

userpw.pyis afile

4.py is afile

answeris 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 eachlinein fileinput.input("/root/datafile.txt"):

...print eachline

...

Dave

python

>>>for eachlinein fileinput.input("/root/datafile.txt"):

...print fileinput.filename()

...

/root/datafile.txt

/root/datafile.txt

>>>for eachlinein fileinput.input("/root/datafile.txt"):

...print fileinput.lineno(),eachline

...

1 Dave

2 python

>>>for eachlinein 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 eachlinein 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值