Python笔记之目录遍历

最近 在 学 Python。 不过 年纪 越来越 大 了, 记性 也 一天 不如 一天, 就 随手 做点 学习 笔记。
使用 Python 3.3, 不是2.7, 因为 后者 中文 处理 太 麻烦。 遍历 目录, 是 一个 非常 常见 的 任务。
如 找出 某 目录 --含所有子目 录--下所有 的 txt 文件, 查看 哪几个文件里面 有“ 苍 老师” 几个 字, 这 可以 看做 全文 搜索 的 简化 版。
再 比如 复制 某 目录 下 --含所有子目 录--下的MP3 文件到播放器中,其它文件不复制。
诸如此类的任务可以举出很多。
这些任务使用Python处理起来非常的方便。
#!/path/python
#coding:utf-8
import os
root="d:\music"
for dirname,dirs,files in os.walk(root):
        print("Dir:",dirname)
        print("Dirs:",dirs)
        print("Files:",files)
        print("*"*50)
上面是使用os模块中walk函数的最基本用法:遍历root目录,列出所有的子目录和其下的文件名,执行结果如下:
>>>
Dir: d:\music
Dirs: ['蔡琴 舞台30年5CD之一【琴窦初开】', '蔡琴 舞台30年5CD之二【抒琴时光】']
Files: ['蔡琴 舞台30年5CD之一【琴窦初开】.7z', '蔡琴 舞台30年5CD之三【金色蔡琴】.part1.rar', '蔡琴 舞台30年5CD之三【金色蔡琴】.part2.rar', '蔡琴 舞台30年5CD之二【抒琴时光】.rar', '蔡琴 舞台30年5CD之五【岁月留琴】.rar', '蔡琴 舞台30年5CD之四【琴动我心】.part1.rar', '蔡琴 舞台30年5CD之四【琴动我心】.part2.rar']
**************************************************
Dir: d:\music\蔡琴 舞台30年5CD之一【琴窦初开】
Dirs: []
Files: ['01 - 出塞曲.wav', '02 - 你的眼神.wav', '03 - 抉择.wav', '04 - 昨夜钟声.wav', '05 - 我的思念.wav', '06 - 我不哭泣.wav', '07 - 盼与寄.wav', '08 - 秋梦.wav', '09 - 相思雨.wav', '10 - 枯叶.wav', '11 - 赠别.wav', '12 - 船.wav', '13 - 远扬的梦舟.wav', '14 - 细雨.wav', '15 - 昨日.wav', '下载说明.txt', '更多分享、更多资源,尽在网店专区.url', '更多无损专辑、影视美图免注册、免回复打包下载.url', '蔡琴 - 舞台30年(1)之琴窦初开.jpg']
**************************************************
Dir: d:\music\蔡琴 舞台30年5CD之二【抒琴时光】
Dirs: []
Files: ['01 - 我有一段情.wav', '02 - 今宵多珍重.wav', '03 - 问白云.wav', '04 - 明月千里寄相思.wav', '05 - 意难忘.wav', '06 - 初恋女.wav', '07 - 庭院深深.wav', '08 - 空中歌声.wav', '09 - 月光组曲之月光小夜曲.wav', '10 - 昨夜你对我一笑.wav', '11 - 飘零的落花.wav', '12 - 梦里相思.wav', '13 - 送别.wav', 'Cover.jpg', '下载说明.txt', '更多分享、更多资源,尽在网店专区.url', '更多无损专辑、影视美图免注册、免回复打包下载.url']
**************************************************
>>>

可以 看出 dirname 是 目录 名, dirs 存储 dirname 下 的 所有一级 子目录 名, files 存储 dirname 下 所有 文件名。
再 改进 一下 显示 格式, 显示 目录 名 及 其下 所有 文件名:
#!/path/python
#coding:utf-8
import os
root="d:\music"
for dirname,dirs,files in os.walk(root):
        print("Dir:",dirname)
        for filename in files:
                print(filename)
        print("*"*50)
执行结果如下:
>>>
Dir: d:\music
蔡琴 舞台30年5CD之一【琴窦初开】.7z
蔡琴 舞台30年5CD之三【金色蔡琴】.part1.rar
蔡琴 舞台30年5CD之三【金色蔡琴】.part2.rar
蔡琴 舞台30年5CD之二【抒琴时光】.rar
蔡琴 舞台30年5CD之五【岁月留琴】.rar
蔡琴 舞台30年5CD之四【琴动我心】.part1.rar
蔡琴 舞台30年5CD之四【琴动我心】.part2.rar
**************************************************
Dir: d:\music\蔡琴 舞台30年5CD之一【琴窦初开】
01 - 出塞曲.wav
02 - 你的眼神.wav
03 - 抉择.wav
04 - 昨夜钟声.wav
05 - 我的思念.wav
06 - 我不哭泣.wav
07 - 盼与寄.wav
08 - 秋梦.wav
09 - 相思雨.wav
10 - 枯叶.wav
11 - 赠别.wav
12 - 船.wav
13 - 远扬的梦舟.wav
14 - 细雨.wav
15 - 昨日.wav
下载说明.txt
更多分享、更多资源,尽在网店专区.url
更多无损专辑、影视美图免注册、免回复打包下载.url
蔡琴 - 舞台30年(1)之琴窦初开.jpg
**************************************************
Dir: d:\music\蔡琴 舞台30年5CD之二【抒琴时光】
01 - 我有一段情.wav
02 - 今宵多珍重.wav
03 - 问白云.wav
04 - 明月千里寄相思.wav
05 - 意难忘.wav
06 - 初恋女.wav
07 - 庭院深深.wav
08 - 空中歌声.wav
09 - 月光组曲之月光小夜曲.wav
10 - 昨夜你对我一笑.wav
11 - 飘零的落花.wav
12 - 梦里相思.wav
13 - 送别.wav
Cover.jpg
下载说明.txt
更多分享、更多资源,尽在网店专区.url
更多无损专辑、影视美图免注册、免回复打包下载.url
**************************************************
>>>
再改进一点,只显示wav文件:
#!/path/python
#coding:utf-8
import os
root="d:\music"
fileformat=".wav"
for dirname,dirs,files in os.walk(root):
        print("Dir:",dirname)
        for filename in files:
                if os.path.splitext(filename)[1]==fileformat:
                        print(filename)
        print("*"*50)

执行结果如下:
>>>
Dir: d:\music
**************************************************
Dir: d:\music\蔡琴 舞台30年5CD之一【琴窦初开】
01 - 出塞曲.wav
02 - 你的眼神.wav
03 - 抉择.wav
04 - 昨夜钟声.wav
05 - 我的思念.wav
06 - 我不哭泣.wav
07 - 盼与寄.wav
08 - 秋梦.wav
09 - 相思雨.wav
10 - 枯叶.wav
11 - 赠别.wav
12 - 船.wav
13 - 远扬的梦舟.wav
14 - 细雨.wav
15 - 昨日.wav
**************************************************
Dir: d:\music\蔡琴 舞台30年5CD之二【抒琴时光】
01 - 我有一段情.wav
02 - 今宵多珍重.wav
03 - 问白云.wav
04 - 明月千里寄相思.wav
05 - 意难忘.wav
06 - 初恋女.wav
07 - 庭院深深.wav
08 - 空中歌声.wav
09 - 月光组曲之月光小夜曲.wav
10 - 昨夜你对我一笑.wav
11 - 飘零的落花.wav
12 - 梦里相思.wav
13 - 送别.wav
**************************************************
>>>

注意,扩展名中包含有“.”,如果省略则找不到任何文件。
再改进一点,只显示文件名中含有“我”的wav文件:
#!/path/python
#coding:utf-8
import os
root="d:\music"
fileformat=".wav"
strSearch="我"
for dirname,dirs,files in os.walk(root):
        print("Dir:",dirname)
        for filename in files:
                if strSearch in filename and os.path.splitext(filename)[1]==fileformat:
                        print(filename)
        print("*"*50)

执行结果如下:
>>>
Dir: d:\music
**************************************************
Dir: d:\music\蔡琴 舞台30年5CD之一【琴窦初开】
05 - 我的思念.wav
06 - 我不哭泣.wav
**************************************************
Dir: d:\music\蔡琴 舞台30年5CD之二【抒琴时光】
01 - 我有一段情.wav
10 - 昨夜你对我一笑.wav
**************************************************
>>>

最后,查找含有“苍老师”几个字的txt文本文件:
#!/path/python
#coding:utf-8
import os
root="d:\music"
fileformat=".txt"
strSearch="苍老师"
for dirname,dirs,files in os.walk(root):
        print("Dir:",dirname)
        for filename in files:
                if os.path.splitext(filename)[1]==fileformat:
                        hFile=open(os.path.join(dirname,filename),'r')
                        contents=hFile.read()
                        if strSearch in contents:
                                print(filename)
        print("*"*50)

随便编写了几个txt文件:
文件名 my.txt 苍老师.txt   王老师.txt
内容
我爱party,
party不爱我!
我爱苍老师,
她不爱我!
我爱王老师,
也爱苍老师!

复制到 d:\music下和 相应目录内。
执行结果如下:
>>>
Dir: d:\music
王老师.txt
苍老师.txt
**************************************************
Dir: d:\music\蔡琴 舞台30年5CD之一【琴窦初开】
苍老师.txt
**************************************************
Dir: d:\music\蔡琴 舞台30年5CD之二【抒琴时光】
王老师.txt
**************************************************
>>>

(The end)

你可能感兴趣的:(python,遍历,目录,文件名)