Python获取目录、文件的注意事项
Python获取指定路径下的子目录和文件有两种方法:
os.listdir(dir)和os.walk(dir),前者列出dir目录下的所有直接子目录和文件的名称(均不包含完整路径),如
>>> os.listdir(r'E:')
['$RECYCLE.BIN', 'Download', 'test.txt', 'data', 'MyDownloads', 'System Volume Information', 'VSPath', 'Youku Files']
>>>
后者,递归地获取dir目录下的所有子目录、文件,采用深度遍历的方式,详见http://www.cnblogs.com/herbert/archive/2013/01/07/2848892.html
更详细的操作目录和文件的方法,如判断是否是文件,参考http://www.cnblogs.com/yuxc/archive/2011/08/01/2124012.html
需要注意的是,使用os.walk()函数内部实际上调用了os.listdir(),另外,dir也是一个Python内建的函数,因此在任何地方都最好不要把dir作为参数变量传入函数(可以换个名字,如_dir等),否则可能会报奇怪的错误。
以下是我遇到的一个错误:
1 import os 2 def getAllDataFiles(directory): 3 dirsOrFiles=os.listdir(dir) 4 print dirsOrFiles 5 6 if __name__=='__main__': 7 print os.listdir('E:') 8 getAllDataFiles('E:')
第7行可以正确输出,第8行则会报错:TypeError: coercing to Unicode: need string or buffer, builtin_function_or_method found,本来出错的原因应该是不能识别dir变量,但因为python这里把它识别为内建的dir()函数,因此没有报类似"NameError: name 'dir' is not defined"这样的错误。