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

os模块函数

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

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

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

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

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

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

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

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

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

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

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

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

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

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

os.path模块函数

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

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

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

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

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

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

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

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

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

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

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

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

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

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

重点函数介绍

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)

运行结果如下:

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,))

运行结果如下

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

Python中os模块使用方法的更多相关文章

  1. python中os模块函数方法详解最全最新

    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 import os print(os.getcwd()) os.chdir("dirname") 改 ...

  2. python中os模块中文帮助

    python中os模块中文帮助   python中os模块中文帮助文档文章分类:Python编程 python中os模块中文帮助文档 翻译者:butalnd 翻译于2010.1.7——2010.1.8 ...

  3. 【转】关于python中re模块split方法的使用

    注:最近在研究文本处理,需要用到正则切割文本,所以收索到了这篇文章,很有用,谢谢原作者. 原址:http://blog.sciencenet.cn/blog-314114-775285.html 关于 ...

  4. python中os模块在windows下的使用

    今天学习了一下Python的os模块,主要是针对文件夹和文件路径的一系列操作. 与Python内置函数相比这里这里的函数功能更多样化,功能也更强大.但是学习过程中我发现很多函数都是只适用于unix系统 ...

  5. Python学习-32.Python中os模块的一些方法

    首先肯定是要引入os模块了. import os getcwd方法: print(os.getcwd()) 上面的语句将会输出当前的工作目录,相当于C#中的Environment.CurrentDir ...

  6. python中os模块

    os  模块 操作系统模块,该模块主要处理与操作系统相关的操作 最常用是文件操作:打开.读取 import os os.getcwd() #获取当前执行文件夹路径 ​ os.chdir('dirnam ...

  7. Python中os模块、csv模块和xlrd模块的使用

    目录 os模块的使用 open("test.txt","mode") 读取文件中的内容 f.read() f.readline(size) f.readline ...

  8. python中os模块和sys模块的常见用法

    OS模块的常见用法 os.remove()   删除文件 os.rename()   重命名文件 os.walk()    生成目录树下的所有文件名 os.chdir()    改变目录 os.mkd ...

  9. python中OS模块操作文件和目录

    在python中执行和操作目录和文件的操作是通过内置的python OS模块封装的函数实现的. 首先导入模块,并查看操作系统的类型: >>> import os os.name # ...

随机推荐

  1. android adb push 命令

    1.获得root权限:adb root 2.设置/system为可读写:adb remount 3.将PC机上文件复制到手机:adb push 文件名  /system/lib

  2. 注册ActiveX控件

    简单了解一下ActiveX控件的知识,ActiveX控件:简单来说,就是利用封装性的原理,把一些功能封装起来,我们可以再其他程序中使用,进而达到方便的目的.但是要注意ActiveX控件必须要注册后才可 ...

  3. centos 7怎么通过图形界面来配置静态ip

    除了通过修改配置文件的方法来配置静态ip,我们还可以通过图形界面来配置,这样做其实更加方便一点 先进入设置页面 选择网络 我这里是通过有线上网的,我们之间修改配置就可以了 选择ipv4,和manual ...

  4. Java - 22 Java 多态

    Java 多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态性是对象多种表现形式的体现. 比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫.小狗.蜥蜴 ...

  5. android:clipChildren属性,子布局超出父布局;

    是否允许子View超出父View的范围,Boolean型true .false ,默认true不允许: android:clipChildren="true":如下 android ...

  6. 「HNOI2015」开店(树链剖分, 主席树)

    /* 考虑将所求的值拆分 记每个点到根的路径长度为dis_i, 那么我们要求的就是\sum_{i = l} ^ r dis_i + dis[u] * (r - l + 1) - 2\sum_{i = ...

  7. Struts2学习:Action获取properties文件的值

    配置文件路径: 配置内容: 方法一: Action内被调用的函数添加下段代码: Properties props = new Properties(); props.load(UploadFileAc ...

  8. WPF c# 定时器

    //定时查询-定时器 DispatcherTimer dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Tick += (s, e) = ...

  9. redis 主从配置和集群配置

    主从配置 |  集群配置 redis主从 主从配置原因: 1.到达读写分离,读的操作和写操作比例10 : 1读数据频繁,写数据次数少,这样可以配置1个master数据库用来写数据,配置多个slave从 ...

  10. uva-10341-二分法

    题意:已知方程的根在0-1范围内,求解方程的根,如果方程不存在根,那就输出 no solution. 直接二分,保留四位小数. #include "pch.h" #include ...