首页 > 代码库 > 【python】文件的输入和输出

【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, rc:\temp):
        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") + \\ + \n)
            print fmt + line.decode("gbk") + \\ + \n,
            filenum = filenum + 1
            
            # 格式化输出目录
            tmp = fmt
            fmt = fmt + 4 * "-"
            listdir(filepath, myfile)
            fmt = tmp
        else:  # 如果filepath是文件,直接列出文件名
            myfile.write(fmt + line.decode("gbk") + \n)  # 显示中文文件
            print fmt + line.decode("gbk") + \n,
            filenum = filenum + 1


if __name__ == __main__:
    mydir = raw_input(please input the path:)
    listfile = open(listfile.txt, w)
    listfile.write(str(mydir).decode("gbk") + \n)
    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 + \n)
        for name in dirs:
            print(os.path.join(name))
            fileinfo.write(os.path.join(root,name) + \n)


if __name__ == __main__:
  mydir = raw_input(please input the path:)
  walkfile = open(walkfile.txt, w)
  walkfile.write(str(mydir).decode("gbk") + \n)
  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()调用的返回结果为一个对象,其中每个元素为一个三元组,三元组分别为(目录,子目录,目录下文件),(子目录,子目录下的子目录,子目录下的文件)……