os模块
- chdir(path) 把path设为当前工作目录
- curdir 返回当前文件夹
- environ 包含系统环境变量和值的字典
- extsep 当前操作系统所使用的文件扩展名分隔符
- get_exec_path() 返回可执行文件的搜索路径
- getcwd() 返回当前工作目录
- listdir(path) 返回path目录下的文件和目录列表
- remove(path) 删除指定的文件,要求用户拥有删除文件的权限,并且文件没有只读或其他特殊属性
- rename(src, dst) 重命名文件或目录,可以实现文件的移动,若目标文件已存在则抛出异常,不能跨越磁盘或分区
- replace(old, new) 重命名文件或目录,若目标文件已存在则直接覆盖,不能跨越磁盘或分区
- scandir(path=‘.’) 返回包含指定文件夹中所有DirEntry对象的迭代对象,遍历文件夹时比listdir()更加高效
- sep 当前操作系统所使用的路径分隔符
- startfile(filepath [, operation]) 使用关联的应用程序打开指定文件或启动指定应用程序
- system() 启动外部程序
>>> import os
>>> import os.path
>>> os.rename('C:\\dfg.txt',
'D:\\test2.txt')
>>> [fname for fname in os.listdir('.')if fname.endswith(('.pyc','.py','.pyw'))]
>>> os.getcwd()
>>> os.mkdir(os.getcwd()+'\\temp')
>>> os.makedirs(os.getcwd()+'\\temp', exist_ok=True)
>>> os.chdir(os.getcwd()+'\\temp')
>>> os.getcwd()
'C:\\Python35\\temp'
>>> os.mkdir(os.getcwd()+'\\test')
>>> os.listdir('.')
['test']
>>> os.rmdir('test')
>>> os.listdir('.')
[]
>>> os.environ.get('path')
>>> import time
>>> time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(os.stat('yilaizhuru2.py').st_ctime))
'2016-10-18 15:58:57'
>>> os.startfile('notepad.exe')
os.path模块
- abspath(path) 返回给定路径的绝对路径
- basename(path) 返回指定路径的最后一个组成部分
- commonpath(paths) 返回给定的多个路径的最长公共路径
- commonprefix(paths) 返回给定的多个路径的最长公共前缀
- dirname§ 返回给定路径的文件夹部分
- exists(path) 判断文件是否存在
- getatime(filename) 返回文件的最后访问时间
- getctime(filename) 返回文件的创建时间
- getmtime(filename) 返回文件的最后修改时间
- getsize(filename) 返回文件的大小
- isabs(path) 判断path是否为绝对路径
- isdir(path) 判断path是否为文件夹
- isfile(path) 判断path是否为文件
- *join(path, paths) 连接两个或多个path
- realpath(path) 返回给定路径的绝对路径
- relpath(path) 返回给定路径的相对路径,不能跨越磁盘驱动器或分区
- samefile(f1, f2) 测试f1和f2这两个路径是否引用的同一个文件
- split(path) 以路径中的最后一个斜线为分隔符把路径分隔成两部分,以元组形式返回
- splitext(path) 从路径中分隔文件的扩展名
- splitdrive(path) 从路径中分隔驱动器的名称
>>> path=
'D:\\mypython_exp\\new_test.txt'
>>> os.path.dirname(path)
>>> os.path.basename(path)
>>> os.path.split(path)
>>> os.path.split('')
('','')
>>> os.path.split('C:\\windows')
('C:\\','windows')
>>> os.path.split('C:\\windows\\')
('C:\\windows','')
>>> os.path.splitdrive(path)
('D:','\\mypython_exp\\new_test.txt')
>>> os.path.splitext(path)
('D:\\mypython_exp\\new_test',='.txt')
使用递归法遍历指定目录下所有子目录和文件。
from os import listdir
from os.path import join, isfile, isdir
def listDirDepthFirst(directory):
'''深度优先遍历文件夹'''
for subPath in listdir(directory):
path = join(directory, subPath)
if isfile(path):
print(path)
elif isdir(path):
print(path)
listDirDepthFirst(path)
shutil模块
使用例
如何使用标准库shutil的copyfile()方法复制文件
>>> import shutil
>>> shutil.copyfile('C:\\dir.txt','C:\\dir1.txt')
将C:\Python35\Dlls文件夹以及该文件夹中所有文件压缩至D:\a.zip文件:将C:\Python35\Dlls文件夹以及该文件夹中所有文件压缩至D:\a.zip文件:
>>> shutil.make_archive('D:\\a','zip','C:\\Python35',
'Dlls')
'D:\\a.zip'
将刚压缩得到的文件D:\a.zip解压缩至D:\a_unpack文件夹:
>>> shutil.unpack_archive('D:\\a.zip','D:\\a_unpack')
下面的代码使用shutil模块的方法删除刚刚解压缩得到的文件夹
>>> shutil.rmtree('D:\\a_unpack')
码使用shutil的copytree()函数递归复制文件夹,并忽略扩展名为pyc的文件和以“新”字开头的文件和子文件夹:
>>> from shutil import copytree, ignore_patterns
>>> copytree('C:\\python35\\test','D:\\des_test'ignore=ignore_patterns('*.pyc','新*'))
实践
把指定文件夹中的所有文件名批量随机化,保持文件类型不变。
from string import ascii_letters
from os import listdir, rename
from os.path import splitext, join
from random import choice, randint
def randomFilename(directory):
for fn in listdir(directory):
name, ext = splitext(fn)
n = randint(5, 20)
newName = ''.join((choice(ascii_letters) for i in range(n)))
rename(join(directory, fn), join(directory, newName+ext))
randomFilename('C:\\test')
编写程序,统计指定文件夹大小以及文件和子文件夹数量。
import os
totalSize = 0
fileNum = 0
dirNum = 0
def visitDir(path):
global totalSize
global fileNum
global dirNum
for lists in os.listdir(path):
sub_path = os.path.join(path, lists)
if os.path.isfile(sub_path):
fileNum = fileNum+1
totalSize = totalSize+os.path.getsize(sub_path)
elif os.path.isdir(sub_path):
dirNum = dirNum+1
visitDir(sub_path)
def main(path):
if not os.path.isdir(path):
print('Error:"', path,'" is not a directory or does notexist.')
return
visitDir(path)
def sizeConvert(size):
K, M, G = 1024, 1024**2, 1024**3
if size >= G:
return str(size/G)+'G Bytes'
elif size >= M:
return str(size/M)+'M Bytes'
elif size >= K:
return str(size/K)+'K Bytes'
else:
return str(size)+'Bytes'
def output(path):
print('The total size of '+path+' is:'+sizeConvert(totalSize)+'('+str(totalSize)+' Bytes)')
print('The total number of files in '+path+' is:',fileNum)
print('The total number of directories in '+path+' is:',dirNum)
if __name__=='__main__':
path = 'C:\\text_dir'
main(path)
output(path)
编写程序,递归删除指定文件夹中指定类型的文件和大小为0的文件。
from os.path import isdir, join, splitext
from os import remove, listdir, chmod, stat
filetypes = ('.tmp', '.log', '.obj', '.txt')
def delCertainFiles(directory):
if not isdir(directory):
return
for filename in listdir(directory):
temp = join(directory, filename)
if isdir(temp):
delCertainFiles(temp)
elif splitext(temp)[1] in filetypes or stat(temp).st_size==0:
chmod(temp, 0o777)
remove(temp)
print(temp, ' deleted....')
delCertainFiles(r'C:\test')
|