zoukankan      html  css  js  c++  java
  • 【python】文件的输入和输出

    1.os模块

    2.os.path 模块

    3.实例

    1. os模块

        对文件系统的访问大多通过python的os模块实现,其中os 模块负责大部分的文件系统操作,包括删除/重命名文件,遍历目
    录树,管理文件访问权限等。

    image

    image

    2.os.path 模块,os.path完成一些针对路径名的操作,包括管理和操作文件路径名中的各个部分,获取文件或子目录信息,文件路径查询等操作。

    image

    3.实例

    3.1 实例1:os模块和path模块接口使用

    # encoding:utf-8
    '''
    Created on 2014-6-5
    
    @author: Administrator
    '''
    
    import os
    
    if __name__ == "__main__":
        for tempdir in ('/tmp', r'c:	emp'):
            if os.path.isdir(tempdir):
                break
            
        else:
            print "no temp directory is available"
            tempdir = ''
        
        if tempdir:
            os.chdir(tempdir)
            cwd = os.getcwd()
            print "***current temporary directory***"
            print cwd
            
            print "***creating example directory..."
            os.mkdir("example")
            os.chdir("example")
            cwd = os.getcwd()
            print "***new working directory..."
            print cwd
            
            print "***original directory listing:"
            print os.listdir(cwd)
            
            print "***creating test file"
            fobj = open("test", "w")
            fobj.write("%s%s" % ("line1", os.linesep))
            fobj.write("%s%s" % ("line2", os.linesep))
            fobj.close()
            
            print "***updating directory listing:"
            print os.listdir(cwd)
            
            print "***renaming test to filetest.txt"
            os.rename("test", "filetest.txt")
            
            print "***updating directory listing:"
            print os.listdir(cwd)
            
            path = os.path.join(cwd, os.listdir(cwd)[0])
            print "***full file pathname:"
            print path
            
            print "***(pathname,basename)="
            print os.path.split(path)
            print "***(filename,extension)="
            print "***basename:", os.path.basename(path)
            print os.path.splitext(os.path.basename(path))
            
            print "***displaying file contents:"
            fobj = open(path)
            for eachline in fobj:
                print eachline
            fobj.close()
            
            print "***deleting test file"
            os.remove(path)
            print "***updating directory listing:"
            print os.listdir(cwd)
            
            print "deleting test directory"
            os.chdir(os.pardir)
            os.rmdir("example")
            
            print "***Done!"
            
            name = raw_input(u"请输入名字:".encode("gbk"))
            count=1;
            for mytuple in os.walk(name, True):
                print "%s:%s" %(count,mytuple[0])
                count=count+1
                print "%s:%s" %(count,mytuple[1])
                count=count+1
                print "%s:%s" %(count,mytuple[2])
                count=count+1

    3.2 实例2:目录文件深度遍历

    """文件目录深度遍历"""
    def listdir(mydir, myfile):
        global fmt
        global filenum
        lists = os.listdir(mydir)  # 列出目录下的所有文件和目录
        for line in lists:
            filepath = os.path.join(mydir, line)
            if os.path.isdir(filepath):  # 如果filepath是目录,则再列出该目录下的所有文件
                myfile.write(fmt + line.decode("gbk") + '\' + '
    ')
                print fmt + line.decode("gbk") + '\' + '
    ',
                filenum = filenum + 1
                
                # 格式化输出目录
                tmp = fmt
                fmt = fmt + 4 * "-"
                listdir(filepath, myfile)
                fmt = tmp
            else:  # 如果filepath是文件,直接列出文件名
                myfile.write(fmt + line.decode("gbk") + '
    ')  # 显示中文文件
                print fmt + line.decode("gbk") + '
    ',
                filenum = filenum + 1
    
    
    if __name__ == '__main__':
        mydir = raw_input('please input the path:')
        listfile = open('listfile.txt', 'w')
        listfile.write(str(mydir).decode("gbk") + '
    ')
        listdir(str(mydir), listfile)
        listfile.write('all the file num is ' + str(filenum))
        listfile.close()

    结果:

    E:KuGou
    ----Beyond - 不再犹豫.mp3
    ----Beyond - 喜欢你.mp3
    ----Beyond - 无尽空虚.mp3
    ----Beyond - 海阔天空.mp3
    ----Beyond - 谁伴我闯荡.mp3
    ----Beyond、黄家驹 - 海阔天空.m4a
    ----Cache
    --------3eb439fd4096a2b76ae8c1020f6c4007.kg!
    ----Lyric
    --------Beyond - 不再犹豫-2bcba2349cd515bf1110613c9a44acf9.krc
    --------Beyond - 光辉岁月-4dc283c7ac7bd5d9bf9b72f167d4ec7d.krc
    --------Beyond - 喜欢你-a48d906b0210cefc2d5d12353d3e7488.krc
    --------Beyond - 无尽空虚-6ade279c2a7da6ce893e581ff22f7817.krc
    --------Beyond - 海阔天空-f87ab6af058e9c5864a81a78e9f62967.krc
    --------吴雨霏 - 今夜烟花灿烂-5810060a70bf1f583f92eb5d541d65e4.krc
    --------周华健 - 让我欢喜让我忧-71c82c68ebab8ca9f97f460e7e8a58fa.krc
    ----Temp
    --------1d4182a7b02d9ea3185ddbbdece48473.kgtemp
    --------2bcba2349cd515bf1110613c9a44acf9.kgtemp
    --------4dc283c7ac7bd5d9bf9b72f167d4ec7d.kgtemp
    ----五月天 - 我不愿让你一个人.mp3
    ----刘德华 - 一起走过的日子.mp3
    ----刘德华 - 冰雨.mp3
    ----刘德华 - 北国之春.mp3
    all the file num is 96

    说明:以上结果有删减,主要是输出格式

    3.3 实例3: os.walk 目录树

    """文件目录广度遍历"""
    def walkdir(mydir,fileinfo,topdown=True):
        for root, dirs, files in os.walk(mydir, topdown):
            for name in files:
                print(name)
                fileinfo.write(name + '
    ')
            for name in dirs:
                print(os.path.join(name))
                fileinfo.write(os.path.join(root,name) + '
    ')
    
    
    if __name__ == '__main__':
      mydir = raw_input('please input the path:')
      walkfile = open('walkfile.txt', 'w')
      walkfile.write(str(mydir).decode("gbk") + '
    ')
      walkdir(str(mydir), walkfile)
      walkfile.close()

    说明:

           1、raw_input 接收中文路径输入,在windows下需要保证eclipse控制台设置编码为GBK,具体设置为,右键单击需要运行的python文件,选择Run as-----Run configurations

    设置Common编码为GBK,否则raw_input 结果为乱码

             image

    2. 保存文件路径名到文件中时,需要使用str.encode(“gbk”)的encode方式,同时保证写入文件路径名的文件格式为GBK,否则可能出现中文乱码

    3.os.walk()调用的返回结果为一个对象,其中每个元素为一个三元组,三元组分别为(目录,子目录,目录下文件),(子目录,子目录下的子目录,子目录下的文件)……

  • 相关阅读:
    Spring的IOC容器学习笔记
    全球疫情可视化展示
    GitHub-暂存区与版本回退
    GitHub-创建仓库与本地同步
    Shell脚本常用模板
    Shell按行读取文件的3种方法
    shell脚本:通过域名获取证书的过期时间
    如何禁止chrome浏览器http自动转成https 【转】
    kafka_2.11-2.0.0_常用操作
    kafka_2.11-2.0.0_安装部署
  • 原文地址:https://www.cnblogs.com/luosongchao/p/3778971.html
Copyright © 2011-2022 走看看