zoukankan      html  css  js  c++  java
  • Python学习笔记之os模块

     Python中的os提供了非常丰富的方法用来处理文件和目录,下面我们将详细的介绍os相关的一些方法和函数:

    os 路径相关的函数:

    1.os.listdir(dirname)列出dirname目录下的目录和文件,需要注意的是传入的dirname是一个目录,而不是文件。

    比如:print(os.listdir('C:/Users/xiong/Desktop/其他/自动化/CQ_Credit/testindex/baidu.py'))就会报传入的目录无效,因为传入的是一个文件。

    print(os.listdir(os.path.dirname(__file__))):列出当前文件所属目录下的所有文件和目录,使用列表的方式展示所有文件和目录

    结果如下:['baidu.py', 'firefox.log', 'geckodriver.log', 'index.py', 'index1.py', 'index2.py', 'index3.py', 'index4.py']

    2.os.getcwd()获得当前工作目录(获取的是目录,而不是具体的文件)

    例如:当前的文件的绝对路径为:C:\Python estindex1.py

    那么在index1.py中使用os.getcwd()的值为:C:\Python est

    3.os.curdir:返回当前目录('.'),暂时还没有找到实际的意义

    4.os.chdir(dirname):改变工作目录到dirname目录
    5.os.path.isdir(name):判断name是不是一个目录,如果name不是目录就返回false,否则就为true

    例如:print(os.listdir('C:/Users/xiong/Desktop/其他/自动化/CQ_Credit/testindex/baidu.py'))

    返回结果:False

    6.os.path.isfile(name):判断name是不是一个文件,如果是目录或者不存在name这个文件返回false,否则为true

    例如:print(os.listdir('C:/Users/xiong/Desktop/其他/自动化/CQ_Credit/testindex/baidu.py'))

    返回结果:True

    7.os.path.exists(name):判断是否存在文件或目录name,存在则返回true
    8.os.path.getsize(name):获得文件大小,单位为字节B

    如果name是目录,则看以下的例子

    如果是文件,则有两种方式,如果指定了具体的文件,则返回文件大小

    例如:print(os.path.getsize('C:/Users/xiong/Desktop/其他/自动化/CQ_Credit/testindex/baidu.py'))【指定具体的文件baidu.py】

    返回结果:1220【返回的是baidu.py这个文件的实际文件大小】

    例如:print(os.path.getsize('C:/Users/xiong/Desktop/其他/自动化/CQ_Credit/testindex'))【未指定具体的文件,只指定了目录】

    返回结果:4096【返回的是baidu.py这个文件所占的磁盘空间大小】

    从这里我们就延伸出文件的大小以及文件所占空间的区别:

    一个文件或文件夹属性中的“大小(Size)”和“占用空间(Size on disk)”通常不相互匹配。“大小”的值表示文件实际大小的字节数,而“占用空间”的值表示文件占用硬盘空间大小的字节数。

    这种差异来自文件系统在驱动器上存储的文件的方式。为了减少使用的地址数量,文件系统把一定数量的字节当成簇。根据不同的文件系统,常见的簇大小可以从2KB的到32KB。一个被写入到磁盘的文件需要占用若干个不相连的簇,而无论文件的实际大小。因此,一个1KB的文件,保存在一个簇大小为2KB的文件系统将占用2KB,但保存在一个簇大小为32KB的文件系统,它会占用32KB。也就是说,一个33KB的文件将占用17个2KB的簇(34KB)或2个32KB的簇(64KB)。

    基于上述的讨论,你会期望占用空间的大小会比实际大小更大,但是多出的部分不会超过一个簇的大小。在查看一个有很多文件的文件夹时,这种差异可能会更大,因为每个单独文件浪费的空间加起来会体现在文件夹上。

    9.os.path.abspath(name):获得绝对路径

    例如:print(os.path.abspath('baidu.py'))

    返回结果:C:UsersxiongDesktop其他自动化CQ_Credit estindexaidu.py

    10.os.path.normpath(path):规范path字符串形式

    11.os.path.split(name):分割文件名与目录(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在)

    例如:print(os.path.split('C:/Users/xiong/Desktop/其他/自动化/CQ_Credit/testindex/baidu.py'))

    返回结果:('C:/Users/xiong/Desktop/其他/自动化/CQ_Credit/testindex', 'baidu.py')【使用元组的方式展示结果】

    特例:print(os.path.split('C:/Users/xiong/Desktop/其他/自动化/CQ_Credit/testindex'))

    返回结果:('C:/Users/xiong/Desktop/其他/自动化/CQ_Credit', 'testindex')将最后一个目录作为了文件名,与前面的目录分开了

    12.os.path.splitext():分离文件名与扩展名

    例如:print(os.path.splitext('C:/Users/xiong/Desktop/其他/自动化/CQ_Credit/testindex/baidu.py'))

    返回结果:('C:/Users/xiong/Desktop/其他/自动化/CQ_Credit/testindex/baidu', '.py')前面为文件名,后面为文件后缀

    13.os.path.join(path,name):连接目录与文件名或目录

    14.os.path.basename(path):返回文件名

    例如:print(os.path.basename('C:/Users/xiong/Desktop/其他/自动化/CQ_Credit/testindex/baidu.py'))

    返回结果:baidu.py 【只返回当前文件】

    15.os.path.dirname(path):返回文件路径 目录

    例如:print(os.path.dirname('C:/Users/xiong/Desktop/其他/自动化/CQ_Credit/testindex/baidu.py'))

    返回结果:C:/Users/xiong/Desktop/其他/自动化/CQ_Credit/testindex【返回的是目录】


    1、os.path方法

         通过传入需要遍历的目录,列出目录下的所有文件并统计文件数,os提供的path模块能对目录非常灵活的操作。

    import os,sys
    def listdir(dir,file):
        file.write(dir + '
    ')
        fielnum = 0
        list = os.listdir(dir)  #列出目录下的所有文件和目录
        for line in list:
            filepath = os.path.join(dir,line)
            if os.path.isdir(filepath):  #如果filepath是目录,则再列出该目录下的所有文件
                myfile.write('   ' + line + '\'+'
    ')
                for li in os.listdir(filepath):
                    myfile.write('     '+li + '
    ')
                    fielnum = fielnum + 1
            elif os.path:   #如果filepath是文件,直接列出文件名
                myfile.write('   '+line + '
    ') 
                fielnum = fielnum + 1
        myfile.write('all the file num is '+ str(fielnum))
    dir = raw_input('please input the path:')
    myfile = open('list.txt','w')

    2、os.walk方法

    os模块提供的walk方法很强大,能够把给定的目录下的所有目录和文件遍历出来。

    方法:os.walk(path),遍历path,返回一个对象,他的每个部分都是一个三元组,('目录x',[目录x下的目录list],目录x下面的文件)

    import os
    def walk_dir(dir,fileinfo,topdown=True):
        for root, dirs, files in os.walk(dir, topdown):
            for name in files:
                print(os.path.join(name))
                fileinfo.write(os.path.join(root,name) + '
    ')
            for name in dirs:
                print(os.path.join(name))
                fileinfo.write('  ' + os.path.join(root,name) + '
    ')
    dir = raw_input('please input the path:')
    fileinfo = open('list.txt','w')
    walk_dir(dir,fileinfo)

    参考地址1:http://blog.csdn.net/smf0504/article/details/54021857

    参考地址2:http://www.cnblogs.com/yigehundan/p/6379586.html

  • 相关阅读:
    资源 | TensorFlow推出新工具Seedbank:即刻使用的预训练模型库【转】
    Vim 基本設置 – 使用Vim-plug管理插件 (3)【转】
    Linux kernel 编译问题记录【转】
    深度学习(四)卷积神经网络入门学习(1)【转】
    深度学习:Keras入门(二)之卷积神经网络(CNN)【转】
    深度学习:Keras入门(一)之基础篇【转】
    CNN笔记:通俗理解卷积神经网络【转】
    [Deep Learning] 神经网络基础【转】
    一文弄懂神经网络中的反向传播法——BackPropagation【转】
    Testin
  • 原文地址:https://www.cnblogs.com/fireporsche/p/7803556.html
Copyright © 2011-2022 走看看