Python使用os模块和fileinput模块来操作文件目录

752次阅读  |  发布于5年以前

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

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8