zoukankan      html  css  js  c++  java
  • python OS库

    os.walk函数的用法  (遍历文件夹下文件并获得路径)

    我们在使用python时时常会遇到调用某些文件的需求,这时我们就需要得到这些文件的路径。python强大的自带os模块使得获得路径变得很容易。

    下面介绍如何使用os.walk函数来遍历文件夹及子文件夹下所有文件并得到路径。

    os.walk的完整定义形式如下:

    os.walk(top, topdown=True, onerror=None, followlinks=False)
    参数:

    top:需要遍历目录的地址。
    topdown 为真,则优先遍历top目录,否则优先遍历top的子目录(默认为开启)。
    onerror 需要一个 callable 对象,当walk需要异常时,会调用。
    followlinks 如果为真,则会遍历目录下的快捷方式(linux 下是 symbolic link)实际所指的目录(默认关闭)。
    以上四个参数一般只需要指定第一个文件夹路径,剩下的一般情况不需要指定。

    os.walk使用
    os.walk 的返回值是一个生成器(generator),也就是说我们需要用循环不断的遍历它(不可以直接print),来获得所有的内容。

    每次遍历的对象都是返回的是一个三元元组(root,dirs,files)

    root 所指的是当前正在遍历的这个文件夹的本身的地址
    dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
    files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
    注意,函数会自动改变root的值使得遍历所有的子文件夹。所以返回的三元元组的个数为所有子文件夹(包括子子文件夹,子子子文件夹等等)加上1(根文件夹)。

     下面举个例子

    import os
    path = 'E:code'
    
    for root,dirs,files in os.walk(path):
           print(root,dirs,files)
    
    E:code ['a', 'b'] ['1.bmp', 'code.lnk', 'ds.py']
    E:codea [] ['2.txt']
    E:code [] ['你的.doc']
    import os
    path = 'E:code'
    
    for root,dirs,files in os.walk(path):
           #print(root,dirs,files)
           for file in files:
               print(os.path.join(root,file))
    
    
    E:code1.bmp
    E:codecode.lnk
    E:codeds.py
    E:codea2.txt
    E:code你的.doc

    os.path.splitext(path)

    说明:将对应路径的文件名和后缀名分割

    示例:

    >>> #定义参数内容
    ... import os
    >>> path1='E:	est6.txt'#文件路径
    >>> path2='E:	est'#目录
    >>>
    >>> #用splitext()方法切割
    ... split_path1=os.path.splitext(path1)
    >>> split_path2=os.path.splitext(path2)
    >>>
    >>> #打印结果
    ... print(split_path1)#正常切割
    ('E:	estx06', '.txt')
    >>> print(split_path2)#目录切割后异常
    ('E:	est', '')
    >>>

    简单运用:统计整个e盘下,txt文件的总数

    >>> file_number=0
    >>> for root,dirs,files in os.walk("e:\"):
    ... for file in files:
    ... if os.path.splitext(file)[1]==".txt":#将对应的文件与文件名分割
    ... file_number+=1
    ... #print (file)
    ...
    >>>
    >>> print (file_number)
    246

    os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。

    它不包括 . 和 .. 即使它在文件夹中。

    只支持在 Unix, Windows 下使用。

    path = 'C:/Users/Administrator/Desktop/back_up'
    ls = os.listdir(path)
    for i in ls:
       print(i)

    .DS_Store
    1.png
    10.png
    11.png
    12.png
    13.png
    14.png
    15.png
    16.png
    17.png
    18.png
    19.png
    2.png
    20.png
    3.png
    4.png
    5.png
    6.png
    7.png
    8.png
    9.png
    backward.py
    forward.py
    generateds.py
    model
    save_training_imgs
    style_imgs
    vggnet
    新建文件夹

    os.path.isdir()os.path.isfile()需要传入的参数是绝对路径

    正确用法:需要先使用python路径拼接os.path.join()函数,将os.listdir()返回的名称拼接成文件或目录的绝对路径再传入os.path.isdir()os.path.isfile().


    def del_file(path):
    ls = os.listdir(path)
    for i in ls:
    c_path = os.path.join(path, i)
    if os.path.isdir(c_path):#判断某一对象(需提供绝对路径)是否为目录
    del_file(c_path)
    else:
    os.remove(c_path)


    os.path.isfile()用于判断某一对象(需提供绝对路径)是否为文件

    os.path.join()函数:连接两个或更多的路径名组件

                   1.如果各组件名首字母不包含’/’,则函数会自动加上

        2.第一个以”/”开头的参数开始拼接,之前的参数全部丢弃,当有多个时,从最后一个开始

        3.如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾

        os.path.join
    
    
    import sys,os
    path1 = 'home'
    path2 = 'deve'
    path3 = 'code'
    path4 = path1 + path2 + path3
    path5 = os.path.join(path1,path2,path3)
    print('path4:',path4)
    print('path5:',path5)
    
    path4: homedevecode
    path5: home/deve/code
    
    path1 = '/home'
    path2 = 'deve'
    path3 = 'code'
    path4 = path1 + path2 + path3
    path5 = os.path.join(path1,path2,path3)
    print('path4:',path4)
    print('path5:',path5)
    
    path4: /homedevecode
    path5: /home/deve/code
    
    
    path1 = 'home'
    path2 = '/deve'
    path3 = 'code'
    path4 = path1 + path2 + path3
    path5 = os.path.join(path1,path2,path3)
    print('path4:',path4)
    print('path5:',path5)
    
    path4: home/devecode
    path5: /deve/code
    
    path1 = '/home'
    path2 = '/deve'
    path3 = 'code'
    path4 = path1 + path2 + path3
    path5 = os.path.join(path1,path2,path3)
    print('path4:',path4)
    print('path5:',path5)
    
    path4: /home/devecode
    path5: /deve/code
    
    path1 = '/home'
    path2 = '/deve'
    path3 = ''
    path4 = path1 + path2 + path3
    path5 = os.path.join(path1,path2,path3)
    print('path4:',path4)
    print('path5:',path5)
    
    path4: /home/deve
    path5: /deve/
    os.path.dirname

    os.path.dirname(path)

    语法:os.path.dirname(path)
    功能:去掉文件名,返回目录

     
    import sys,os
    print(os.path.dirname('/root/userfolder/SRFBN_CVPR19/a.py'))

    /root/userfolder/SRFBN_CVPR19


  • 相关阅读:
    [http://www.chromium.org/]Chromium项目Home
    [DevExpress]ASP.NET控件ASPxComboBox组合框小结(二)
    [C#多线程编程(三)]多线程使用
    拼音输入法你应该更高级点儿
    [实体框架编程] 第三章 查询实体数据模型(一)
    [C#多线程编程(一)] 导读
    [C#多线程编程(五)]并行编程
    [C#多线程编程(四)]高级线程编程
    LINQ之查询语法select子句
    log4net系列目录
  • 原文地址:https://www.cnblogs.com/tingtin/p/12539074.html
Copyright © 2011-2022 走看看