Python中os模块使用方法

os模块提供了对系统环境、文件、目录等操作系统级的接口函数。本文主要描述os模块和os.path模块常用函数以及常用实例。

os模块函数

os.getcwd()  获取当前工作的目录。

Python中os模块使用方法

os.listdir('dirname')  获取指定目录下的文件和目录。缺点是不能递归显示。

Python中os模块使用方法

os.makedirs('dirname1/dirname2') 递归创建目录。在dir_temp目录下创建data_m1目录,在data_m1目录下创建data_m2目录。

Python中os模块使用方法

os.removedirs('dirname') 若目录为空,则删除。不好用,建议使用shutil.rmtree()。比如data_m1目录下存在123.txt文件和data2_m2目录。

Python中os模块使用方法

上述命令执行成功后,只删除data2_m2空文件夹,data_m1由于存在123.txt文件没有删除。要想全部删除,建议使用shutil.rmtree()

  os.mkdir('dirname') 创建目录;相当于shell中mkdir命令。下述命令在data_m1目录下创建data2_m2文件。但是如果在不存在的目录下创建目录会失败,同时如果指定目录下创建已有指定目录也会失败。

Python中os模块使用方法

os.rmdir('dirname') 删除空目录,若目录不为空则无法删除。只能删除空目录,不好用。

Python中os模块使用方法

os.chdir('dirname') 切换到执行目录。如下从当前目录切换到c:\temp目录下。

Python中os模块使用方法

os.remove(path) 删除path指定的文件。文件必须存在,否在会报错。

Python中os模块使用方法

  os.rename(old,new) 重命名文件或目录。文件名123.txt修改为456.txt

Python中os模块使用方法

os.stat(path) 获取path指定文件的所有属性

Python中os模块使用方法

os.system('command') 执行系统外部命令,可以获取返回命令结果码,但是无法获取命令执行输出结果,输出结果直接打印到屏幕终端。

Python中os模块使用方法

os.environ  获取系统环境变量。以字典形式返回。

Python中os模块使用方法

想要获取指定变量可以使用如下格式

Python中os模块使用方法

os.path模块函数

  os.path.abspath(path) 获取path绝对路径。返回当前目录下123.txt文件的绝对路径

Python中os模块使用方法

  os.path.split(path) 分割成目录和文件名,以二元组形式返回。

Python中os模块使用方法

  os.path.splitext(path) 从路径中分割出文件的扩展名

Python中os模块使用方法

  os.path.dirname(path) 获取文件路径

Python中os模块使用方法

  os.path.basename(path)  获取文件名

Python中os模块使用方法

os.path.exists(path)  判断文件或目录是否存在

Python中os模块使用方法

  os.path.isabs(path)  判断输入的路径是否为绝对路径

Python中os模块使用方法

  os.path.isfile(path)  判断是否为文件

Python中os模块使用方法

os.path.isdir(path)  判断是否为目录

Python中os模块使用方法

  os.path.join(path1[, path2[, ...]])  组合多个路径

Python中os模块使用方法

  os.path.getctime(filename)  获取文件或者目录的创建时间

Python中os模块使用方法

os.path.getatime(filename)  获取文件或者目录的最后存取时间

Python中os模块使用方法

  os.path.getmtime(filename)  获取文件或者目录的最后修改时间

Python中os模块使用方法

  os.path.getsize(filename) 获取文件大小,如果为目录,返回0

Python中os模块使用方法

重点函数介绍

1、os.walk()

语法

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

参数描述

top 指定搜索目录
topdown 可选参数,默认值为True, 表示先返回*目录下的文件,然后再遍历子目录中的文件。如果为False,表示先遍历子目录中的文件,然后再返回*目录下的文件。
onerror 可选,默认值为None,表示忽略文件遍历时的错误。如果不为空,则提供一个自定义函数提示错误信息后继续遍历或抛出异常中止遍历。
followlinks 可选参数,默认值为False。表示是否要跟随目录下的链接去继续遍历,要注意的是,os.walk不会记录已经遍历的目录,所以跟随链接遍历的话有可能一直循环调用下去。

输出

 返回3元组(dirpath, dirnames, filenames)。其中dirpath表示目录的路径,是一个字符串。dirnames 是一个列表,包含了dirpath下所有子目录的名字。filenames是一个列表,包含了非目录文件的名字。这些名字不包含路径信息,如果需要得到全路径,需要使用os.path.join(dirpath, name)

常用实例

1、目录和文件的创建、删除

#-*- coding:utf-8 -*-#

import os
import shutil #全局变量
cur_dir = os.getcwd()
new_dir = os.path.join(cur_dir,'temp') #判断new_dir目录是否存在,不存在则创建。如果存在则删除再创建
if not os.path.exists(new_dir):
os.makedirs(new_dir)
else:
shutil.rmtree(new_dir)
os.makedirs(new_dir) #创建tmp.log文件并写入内容
new_file = os.path.join(new_dir,'tmp.log')
fp = open(new_file,'w')
fp.write('test')
fp.close()

2、查找d:\dir_temp目录下的所有文件,以绝对路径输出文件名

# -*- coding: utf-8 -*-

import os

search_dir = 'd:\\dir_temp'
for root, dirs, files in os.walk(search_dir):
for name in files:
print os.path.join(root, name)

运行结果如下:

Python中os模块使用方法

3、获取指定文件相关属性

# -*- coding: utf-8 -*-

import os

filename = 'd:\\dir_temp\\data_m1\\456.txt'
file_stat = os.stat(filename)
print(file_stat) # 获取文件所属用户ID
print('os.stat.st_uid = %s ' % (file_stat.st_uid,))
#获取文件所属组ID
print('os.stat.st_gid = %s ' % (file_stat.st_gid,))
#获取文件大小,以字节输出
print('os.stat.st_size = %s ' % (file_stat.st_size,))
#获取最近访问时间
print('os.stat.st_atime = %s ' % (file_stat.st_atime,))
#获取最近修改时间
print('os.stat.st_mtime = %s ' % (file_stat.st_mtime,))
#获取创建时间。某些系统上(如Unix)是最新数据更改的时间。
print('os.stat.st_ctime = %s ' % (file_stat.st_ctime,))

运行结果如下

Python中os模块使用方法

4、根据关键字搜索指定目录下的文件,并输出文件名

#-*- coding:utf-8 -*-#

import os
import sys
import re if len(sys.argv[1:]) == 0:
print 'Please input search key words'
sys.exit(1) search_keyword = sys.argv[1:]
search_dir = os.getcwd()
filelists = [] for root, dirs, files in os.walk(search_dir):
for filename in files:
file_path = os.path.join(root, filename)
pattern = '.*?'.join(search_keyword)
regex = re.compile(pattern)
fp = open(file_path,'r')
for line in fp.readlines():
match = regex.search(line)
if match:
print file_path
break

5、统计指定目录下的文件和文件夹大小,类似linux上的du功能

#-*- coding:utf-8 -*-#

import os

DIRECTORY = 'D:\\worktools'

def getDirSize(dir):
size = 0
for root, dirs, files in os.walk(dir):
size += sum([os.path.getsize(os.path.join(root, file)) for file in files])
return size if __name__ == '__main__':
for file in os.listdir(DIRECTORY):
filepath = os.path.join(DIRECTORY,file)
if os.path.isdir(filepath):
dirsize = getDirSize(filepath)
print "%s %.2fM" % (filepath,(dirsize/1024/1024))
else:
dirsize = os.path.getsize(os.path.join(DIRECTORY,filepath))
print "%s %.2fM" % (filepath,(dirsize/1024/1024))

输出结果如下:

D:\worktools\alipay_wap_main.apk 46.00M
D:\worktools\Beyond_Compare-Trial-YY.exe 31.00M
D:\worktools\java 2393.00M
D:\worktools\jd-gui-0.3.3.windows 0.00M
D:\worktools\npp_7.3.3_Installer.exe 2.00M
D:\worktools\oracle 11g 1243.00M
D:\worktools\oracle 11g enterprise 2241.00M
D:\worktools\teamviewer 12.00M
D:\worktools\TortoiseSVN-1.9.4.27285-x64-svn-1.9.4.msi 17.00M
D:\worktools\wps 356.00M
D:\worktools\xmanager 41.00M
D:\worktools\xmanager.rar 41.00M
D:\worktools\zhaoshangyinxing_422.apk 39.00M
D:\worktools\反编译 0.00M
上一篇:转载 50种方法优化SQL Server数据库查询


下一篇:CollapsingToolbarLayoutDemo【可折叠式标题栏,顺便带有CardView卡片式布局】