您的位置:首页 > 编程语言 > Python开发

Python笔记之目录遍历

2013-02-23 17:12 627 查看
最近在学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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息