学习Python目录操作方法

发布时间:2020-06-14编辑:脚本学堂
本文介绍下,python中目录操作的方法与实例,主要是os模块的一些技巧,有需要的朋友参考下。

python的目录操作函数中,参数dirname是当前正在访问的目录的绝对路径,而参数files内的文件名则是相对于dirname的相对路径
当前工作目录并没有改变,那就是说该脚本仍然呆在脚本启动时刻所在的Python目录操作中。

这也是需要把filepath弄成带有dirname和file的绝对路径的原因。
若要改变当前工作目录dirname,只要在针对每个目录调用os.path.walk的函数中调用一下os.chdir(dirname)。

然后,在该函数的末尾重新调用os.chdir(dirname)将当前工作目录改回原值即可。

例如:
 

复制代码 代码示例:
def ls(arg, dirname, files): 
print dirname, ’has the files’, files 
os.path.walk(os.environ[’HOME’], ls, None)

本例中,参数arg并非必需,所以在os.path.walk调用中让其取值为None即可。 

列出主目录中所有大于1Mb的文件: 
 

复制代码 代码示例:
def checksize1(arg, dirname, files): 
for file in files: 
filepath = os.path.join(dirname, file) 
if os.path.isfile(filepath): 
size = os.path.getsize(filepath) 
if size > 1000000: 
sizesize_in_Mb = size/1000000.0 
arg.append((size_in_Mb, filename)) 
bigfiles = [] 
root = os.environ[’HOME’] 
os.path.walk(root, checksize1, bigfiles) 
for size, name in bigfiles: 
print name, ’大小为’, size, ’Mb’

参数arg带来了巨大的灵活性。
可以使用它来同时存放输入数据和生成的数据结构。

下面的例子,将收集所有大于一定尺寸的带有规定扩展名的文件的文件名和大小。
输出的结果按照文件大小排列。

当然,也可以编写具有类似功能的代码来替代os.path.walk。

将针对每个文件而非每个目录来调用的自定义函数
 

复制代码 代码示例:
def checksize2(fullpath, bigfiles): 
size = os.path.getsize(fullpath) 
if size > 1000000: 
bigfiles.append(’%.2fMb %s’ % (size/1000000.0, fullpath)) 
bigfiles = [] 
root = os.environ[’HOME’] 
find(checksize2, root, bigfiles) 
for fileinfo in bigfiles: 
print fileinfo

注意:
为列表排序的函数,bigfiles[’filelist’]函数中的每个元素就是一个字典,键size保存着一个字符串,不过在进行比较之前我们必须将单位Mb(最后两个字符)去掉,并将其转换为浮点数。对于文件和目录的处理,虽然可以通过操作系统命令来完成,但是Python目录操作为了便于开发人员以编程的方式处理相关工作,提供了许多处理文件和目录的内置函数。

重点:
这些函数无论是在Unix、Windows还是Macintosh平台上,它们的使用方式是完全一致的。