Os.walk用法小结

来源:互联网 发布:c高级编程第11版 pdf 编辑:程序博客网 时间:2024/06/03 10:35
  1. 定义:

假设你希望对某个文件夹中的所有文件改名,包括文件夹中所有子文件夹中的所有文件。也就说你需要遍历目录树,处理每个文件。Python正好提供了这样的函数

  1. 用法

代码如下:

import os

for folder, subfolders,filenamesin os.walk(r'C:\Users\eilmoro\Desktop\test'):

    print('The folder is%s'%folder)

    for foldername insubfolders:

        print('The subfoldersis %s'%foldername)

    for file in filenames:

        print('The files is%s'%file)

输出结果:

The folder is C:\Users\eilmoro\Desktop\test

The subfolders is st01

The files is stx01.txt

The files is stx02.txt

The folder is C:\Users\eilmoro\Desktop\test\st01

The subfolders is sst01

The files is sstx01.txt

The files is sstx02.txt

The folder is C:\Users\eilmoro\Desktop\test\st01\sst01

The files is ssstx01.txt

The files is ssstx02.txt


  1. 注意点
    1. 第一个for循环是遍历这个test文件夹及它下面的每一个子文件夹,文件及子文件夹下的子文件夹和文件直到目录的最后一层
    2. 第一个for后面的三个变量名不用固定形式,取有意义的三个变量名就可以,如:mainfolder, folders, files也是可以的,不影响程序的运行
    3. 输出的结果:除了第一个变量是完整的绝对路径,第二个只是子文件夹名的列表,第三个只是文件名的列表
    4. 传入walk后的路径要注意转义字符的问题,若传入的路径是'C:\Users\eilmoro\Desktop\test'没有r,程序运行是会报错:
      1.  Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun错误解决方案
      2.  可以写成如下几种形式:
        1. 'C:/Users/eilmoro/Desktop/test'
        2. r'C:\Users\eilmoro\Desktop\test'
        3. 'C:\\Users\\eilmoro\\Desktop\\test'

我强烈推荐1写法,这在Linux和window下都是行的通的