zoukankan      html  css  js  c++  java
  • day3-python-文件操作(2)

    本文内容涉及python中的os模块和os.path模块的常用操作,这两个模块提供了与平台和操作系统无关的文件系统访问方法。os模块负责大部分的文件系统操作,包括:删除文件、重命名文件、遍历目录树等;os.path模块提供了一些针对路径名的操作,包括:获取文件和子目录信息,文件路径查询等。
    1. os模块

    remove(path) 删除文件
    rename(src,dst) 重命名文件
    renames(old,new) 递归重命名目录或文件
    walk(top,topdown=True,onerror=None,followlinks=False) 返回指定目录下每次遍历的路径名、目录列表、文件列表,top为指定的顶层目录,topdown表示自顶向下遍历,onerror指定异常函数,followlinks是否递归遍历链接文件。
    chdir(path) 改变当前工作目录
    listdir(path) 列出指定目录的文件和目录
    getcwd() 返回当前工作目录
    mkdir(path,mode=0o777) 创建目录
    makedirs(path,mode=0o777) 递归创建目录
    rmdir(path) 删除目录
    removedirs(path) 递归删除目录

    实例代码:

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    >>> import os
    >>> os.listdir('.')
    []
    >>> os.mkdir('test1')
    >>> os.makedirs('test2/test21/test211')
    >>> os.listdir('.')
    ['test2', 'test1']
    >>> os.listdir('./test2')
    ['test21']
      
    >>> open('test.txt','w')
    <open file 'test.txt', mode 'w' at 0x7faa26f69930>
    >>> os.listdir('.')
    ['test2', 'test1', 'test.txt']
    >>> os.remove('test.txt')
    >>> os.listdir('.')
    ['test2', 'test1']
    >>> os.getcwd()
    '/home/alexzhou/study_workspace/python/test'
    >>> os.chdir('./test1')
      
    >>> os.getcwd()
    '/home/alexzhou/study_workspace/python/test'
    >>> os.rename('test1','test3')
    >>> os.listdir('.')
    ['test2', 'test3']
      
    >>> os.renames('test2/test21/test211','test1/test11/test111')
    >>> os.listdir('.')
    ['test1', 'test3']
    >>> os.listdir('test1')
    ['test11']
    >>> os.listdir('test1/test11')
    ['test111']
      
    >>> open('test3/test.txt','w')
    <open file 'test3/test.txt', mode 'w' at 0x7faa26f69930>
    >>> for top,dirs,files in os.walk('.'):
    ...     print 'top:',top
    ...     print 'dirs:',dirs
    ...     print 'files:',files
    ...
    top: .
    dirs: ['test1', 'test3']
    files: []
    top: ./test1
    dirs: ['test11']
    files: []
    top: ./test1/test11
    dirs: ['test111']
    files: []
    top: ./test1/test11/test111
    dirs: []
    files: []
    top: ./test3
    dirs: []
    files: ['test.txt']
      
    >>> os.remove('test3/test.txt')
    >>> os.rmdir('test3')
    >>> os.listdir('.')
    ['test1']
    >>> os.removedirs('test1/test11/test111')
    >>> os.listdir('.')
    []


    2. os.path模块

    basename(path) 去掉目录路径,返回文件名
    dirname(path) 去掉文件名,返回目录路径
    join(*path) 将分离的各部分组合成一个路径名
    split(path) 返回(dirname(),basename())元组
    splitdrive(path) 返回(drivename,pathname)元组
    splitext(path) 返回(filename,extension)元组
    exists(path) 指定文件或目录是否存在
    isabs(path) 指定路径是否是绝对路径
    isdir(path) 指定路径是否存在且是一个目录
    isfile(path) 指定路径是否存在且是一个文件
    islink(path) 指定路径是否存在且是一个符号链接
    samefile(path1,path2) 两个路径名是否指向同一个文件


    实例代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    >>> os.path.basename('/home/zhoujianghai/study_workspace/python/test_file.py')
    'test_file.py'
    >>> os.path.dirname('/home/zhoujianghai/study_workspace/python/test_file.py')
    '/home/zhoujianghai/study_workspace/python'
      
    >>> os.path.join('home','zhoujianghai','study_workspace')
    'home/zhoujianghai/study_workspace'
      
    >>> os.path.split('/home/zhoujianghai/study_workspace/python/test_file.py')
    ('/home/zhoujianghai/study_workspace/python', 'test_file.py')
    >>> os.path.splitdrive('/home/zhoujianghai/study_workspace/python/test_file.py')
    ('', '/home/zhoujianghai/study_workspace/python/test_file.py')
      
    >>> os.path.splitext('/home/zhoujianghai/study_workspace/python/test_file.py')
    ('/home/zhoujianghai/study_workspace/python/test_file', '.py')
      
    >>> os.path.samefile('../test_file.py','../test_file.py')
    True
    >>> os.path.exists('../test_file.py')
    True


    下面是统计指定目录下文件数和代码行数的小例子

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    import sys,os
      
    def count_file_lines(filepath):
        ret = 0
        f = open(filepath,"r")
        for lines in f:
            if lines.split():
                ret += 1
        return ret
      
    if __name__ == '__main__':
        top = './'
        total_lines = 0
        total_files = 0
        for root,dirs,files in os.walk(top):
            for filename in files:
                ext = os.path.splitext(filename)[-1]
                if ext in ['.py']:
                    filepath = root + os.sep + filename
                    total_files += 1
                    total_lines += count_file_lines(filepath)
      
        print 'Total lines:',total_lines
        print 'Total files: ',total_files





  • 相关阅读:
    mybatis几种开发方式
    SpringData,JPA,MongoDB,Solr,Elasticsearch底层逻辑关系
    简论远程通信(RPC,Webservice,RMI,JMS的区别)
    spring/spring boot/spring mvc中用到的注解
    Centos常用命名
    Mybatis详解
    Java成长之路
    Hibernate 与Mybatis之比较
    Struts2 与SpringMVC之比较
    Maven 配置文件详解
  • 原文地址:https://www.cnblogs.com/bruceg/p/5150371.html
Copyright © 2011-2022 走看看