zoukankan      html  css  js  c++  java
  • python 16 文件操作(二)

    转自 http://www.cnblogs.com/BeginMan/p/3169020.html

    一、文件系统

    从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。

    Python对文件系统的操作是通过os模块实现。提供了访问操作系统功能的接口,但是这个os模块只是一个伪文件系统操作,真正的“模块”如,dos,os2等,这些是直接的底层工作,而Python的os模块只是一种借用操作(个人理解)

    os.path模块可对路径进行相关操作。

    os、os.path这两个模块与平台、操作系统无关。

     二、os模块的文件/目录访问函数

    函数描述
    文件处理  
    mkfifo()/mknod() 创建命名管道/创建文件系统节点
    remove(path)/unlink(path) 删除文件 如:os.remove('d:\b.png')
    rename(old, new)/renames(old, new)  重命名文件:如:os.rename('d:\b.png','d:\a.png')
    stat(path)  返回文件信息:
    >>> os.stat('d:\a.png')
    (33206, 0L, 0, 0, 0, 0, 4088L, 1372746141, 1372734171, 1372746141)
    >>> 
    symlink()  创建符号链接
    utime()   更新时间戳
    tmpfile()  创建并打开('w+b')一个新的临时文件,注意不含参数,一旦执行则创建一个临时文件,类型未知
    >>> os.tmpfile()#创建临时文件
    <open file '<tmpfile>', mode 'w+b' at 0x011D4BF0>
    >>> os.rename('d:\t58g.2','d:\abc.txt')#改成txt
    walk(top, topdown, onerror)  生成一个目录树下所有文件名
    目录/文件夹  
    chdir(path)  改变当前工作目录
    listdir(path)  列出指定目录文件
    >>> os.listdir('d:\')
    ['a.png', 'abc.txt', 'out.txt', 'Program Files', 'Python25', 'RECYCLER',]>>> 
    getcwd()/getcwdu()  返回当前目录:
    >>> os.getcwd()
    'D:\Python25'
    >>> os.getcwdu()
    u'D:\Python25
    mkdir(path)/makedirs(name, mode) 创建目录/创建多层目录
    >>> os.mkdir('D:\file')

    rmdir(path)/removedirs(name)  删除目录/删除多层目录
    访问/权限  
    access(path, mode)  验证权限目录
    chmod(path, mode)  更改权限模式
    文件描述符操作  
    open()、read()、write()  见上一节
    dup()/dup2()  复制

     其他的见《Python 核心编程2》9.7节

    应用:

    (1):检查下磁盘中(D)是否有文件"BeginMan"的文件夹,如果存在则新建"SuperMan",
                在该目录下创建一个名为"readme.txt"的文本文件,写入数据,然后输出文件内容
    (2):如果文件夹BeginMan存在,则遍历该目录,并输入目录文件,
                如果该目录下存在文件,且如果有文件名为b.png,则重命名为boy.png,移到D盘根目录下
      (3):删除BeginMan目录下所有文件,只保留子目录

    文件系统图如下:

    D盘中并没有SuperMan的文件夹,这里程序如下:

    复制代码
    #coding=utf-8
    import os,shutil
    import datetime
    
    DIR = 'D:\'
    FILENAME = 'BeginMan'
    PATH = 'D:\%s' %FILENAME
    CONTENT = """
                (1):检查下磁盘中(D)是否有文件"BeginMan"的文件夹,如果存在则新建"SuperMan",
    
                在该目录下创建一个名为"readme.txt"的文本文件,写入数据,然后输出文件内容
    
                (2):如果文件夹BeginMan存在,则遍历该目录,并输入目录文件
    ,
                如果该目录下存在文件,且如果有文件名为b.png,则重命名为boy.png,移到D盘根目录下
    
                (3):删除BeginMan目录下所有文件,只保留子目录
                ==============================================
    
                时间:%s
    
                作者:%s
    
                """ %(datetime.datetime.now(),FILENAME)
    
    if FILENAME in os.listdir(DIR):
            print u'已经有同名文件:%s' %FILENAME
            for obj in os.listdir(PATH):
                print  u'%s\%s
    ' %(PATH,obj)
                try:
                    if os.path.isfile(u'%s\%s' %(PATH,obj)):
                        if obj == 'b.png':  #如果含有文件为b.png,则重命名为boy.png,移动到该目录上级
                            os.rename(u'%s\%s' %(PATH,obj),u'%s\%s' %(PATH,'boy.png'))
                            shutil.move(u'%s\%s' %(PATH,'boy.png'), 'D:\')
                        os.remove(u'%s\%s' %(PATH,obj))#删除文件,只保留子目录
                except Exception,e:
                    print 'The error:%s' %e
            FILENAME = 'SuperMan'
            os.mkdir('D:\%s' %FILENAME)                    #创建目录
            f = open('D:\%s\readme.txt'%FILENAME,'w' )    #在该目录下创建文件
            f.write(CONTENT)                                #写入数据
            f.close()
            f = open('D:\%s\readme.txt'%FILENAME,'r' )
            print [lines.strip() for lines in f]            #输出
    复制代码

    运行如下:

    效果如下:

    Python有关文件、文件夹操作小结:

    import os,shutil  #要用到这两个模块
     
    创建文件:
    1) os.mknod("test.txt") 创建空文件
    2) open("test.txt",w)           直接打开一个文件,如果文件不存在则创建文件
     
    创建目录:
    os.mkdir("file")                   创建目录
     
    复制文件:
    shutil.copyfile("oldfile","newfile")       oldfile和newfile都只能是文件
    shutil.copy("oldfile","newfile")            oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
     
    复制文件夹:
    shutil.copytree("olddir","newdir")        olddir和newdir都只能是目录,且newdir必须不存在
     
    重命名文件(目录)
    os.rename("oldname","newname")       文件或目录都是使用这条命令
     
    移动文件(目录)
    shutil.move("oldpos","newpos")  
     
    删除文件
    os.remove("file")
     
    删除目录
    os.rmdir("dir") 只能删除空目录
    shutil.rmtree("dir")    空目录、有内容的目录都可以删
     
    转换目录
    os.chdir("path")    换路径
     
    判断目标
    os.path.exists("goal")    判断目标是否存在
    os.path.isdir("goal")     判断目标是否目录
    os.path.isfile("goal")    判断目标是否文件    参考:http://www.cnblogs.com/phoebus0501/archive/2011/01/19/1939646.html

     三、os.path

    如下表:

     函数描述
     分隔  
     basename(p)  去掉目录路径, 返回文件名:
    os.path.basename('D:\Project\python25\Lib\a.txt') #a.txt
     dirname(p)  去掉文件名, 返回目录路径:
    os.path.dirname(D:\Project\python25\Lib\a.txt)
    #D:Projectpython25Lib
     join()  将分离的各部分组合成一个路径名:Django项目中常用,
    settings.py
    DIRNAME = os.path.dirname(__file__)
    TEMPLATE_DIRS = (
         os.path.join(DIRNAME, "themes"),
    )
     split()  返回 (dirname(), basename()) 元组:
    >>>DIRNAME = 'D:\Project\python25\Lib\a.txt'
    >>>os.path.split(DIRNAME)
    ('D:\Project\python25\Lib', 'a.txt')
     splitdrive()  返回 (drivename, pathname) 元组:
    os.path.splitdrive(DIRNAME)
    #('D:', '\Project\python25\Lib\a.txt')
     splitext()  返回 (filename, extension) 元组
    os.path.splitext(DIRNAME) 
    #('D:\Project\python25\Lib\a', '.txt')
     信息  
     getatime(filename)  返回最近访问时间:
    gTime =  os.path.getatime(os.getcwd())
    print gTime  #1372836299.77
    tTime = time.localtime(gTime)
    print time.strftime('%Y-%m-%d %H:%M:%S',tTime)  #2013-07-03 15:24:59
    getctime(filename)  返回文件创建时间:
    cTime = os.path.getctime(os.getcwd())
    c_time = time.localtime(cTime)
    print time.strftime('%Y-%m-%d %H:%M:%S',c_time) #2013-04-17 17:27:46
     getmtime(filename)  返回最近文件修改时间
     getsize(filename) 返回文件大小(以字节为单位)
     查询  
     exists()  指定路径(文件或目录)是否存在
     isabs()  指定路径是否为绝对路径
     isdir()  指定路径是否存在且为一个目录
     isfile()  指定路径是否存在且为一个文件
     islink()  指定路径是否存在且为一个符号链接

     ismount()

    samefile()

     指定路径是否存在且为一个挂载点

    两个路径名是否指向同个文件

  • 相关阅读:
    第十天冲刺个人博客
    第九天冲刺个人博客
    软件工程学习进度表(十六周)
    部署一个件简简单单的项目竟然会遇到这么多事?
    Apache和Tomcat公用80端口
    windows下nginx中配置端口转发 ----本文来自转载
    linux中nginx中配置端口转发
    字体图标:Font Awesome
    最新主流 Markdown 编辑器推荐
    博客园如何转载别人的文章(来自转载)
  • 原文地址:https://www.cnblogs.com/cmybky/p/11772361.html
Copyright © 2011-2022 走看看