python对文件和目录操作os库的用法
导入库
文件和目录操作主要涉及以下库
- os 库:常用文件和目录操作,python2,3都可用
- pathlib 库:需要python>3.4,常用Path,路径对象
- shutil 库:拷贝、粘贴、重命名
- glob 库:文件列表匹配
import os
from pathlib import Path
import shutil
from glob import glob
表格对比
os / os.path | pathlib |
---|---|
os.path.abspath() | Path.resolve() |
os.chmod() | Path.chmod() |
os.mkdir() | Path.mkdir() |
os.rename() | Path.rename() |
os.replace() | Path.replace() |
os.rmdir() | Path.rmdir() |
os.remove(), os.unlink() | Path.unlink() |
os.getcwd() | Path.cwd() |
os.path.exists() | Path.exists() |
os.path.expanduser() | Path.expanduser() and Path.home() |
os.listdir() | Path.iterdir() |
os.path.isdir() | Path.is_dir() |
os.path.isfile() | Path.is_file() |
os.path.islink() | Path.is_symlink() |
os.link() | Path.link_to() |
os.symlink() | Path.symlink_to() |
os.stat() | Path.stat(), Path.owner(), Path.group() |
os.path.isabs() | PurePath.is_absolute() |
os.path.join() | PurePath.joinpath() |
os.path.basename() | PurePath.name |
os.path.dirname() | PurePath.parent |
os.path.samefile() | Path.samefile() |
os.path.splitext() | PurePath.suffix |
获取当前目录 os.getcwd()
os.getcwd()
Path.cwd()
检查目录/文件是否存在 os.path.exists()
os.path.exists('old_dir') #检查目录是否存在,返回布尔值
os.path.exists('test.txt') #检查文件是否存在,返回布尔值
创建目录 os.mkdir() 和 os.makedirs()
os.mkdir('new_dir') #创建目录,若该目录存在则报错
os.makedirs('dir1/dir2/dir3') #递归创建目录,若该目录存在则报错
Path('new_dir').mkdir(parents=False,exist_ok=False)
# parents 属性为True会递归创建目录,为False则递归创建目录报错
# exists 属性为True存在目录还去创建不报错,属性为False存在目录还去创建会报错
删除目录 os.rmdir()
os.rmdir('new_dir') #删除该目录 或者 os.unlink()
Path('new_dir').rmdir() #删除该目录
复制目录
新建、读、写文件 with open()
f1 = open('test.txt','r',encoding='utf-8')
content = f1.read()
print(content)
f1.close() # 使用完文件后要关闭
# 如果不想考虑文件关闭的问题,可以使用 with 来打开文件
# 文件用完后它会自动关闭
with open('test.txt','r',encoding='utf-8') as f2:
content = f2.read()
content
with open('god.1','a') as f:
f.write('')
Path('123.txt').touch(exist_ok=False)
重命名 os.rename()
os.rename('dir1','dir1_renamed') #重命名目录
os.renames('dir1_renamed/dir2/dir33','dir11/dir22/dir33') #递归重命名目录
os.rename('123.txt','123_renamed.txt') #重命名文件
os.renames('test/AWS-HO6033/_folder template','test/AWS-HO6033/template')
# 递归重命名文件,注意文件夹如果有内容,则重命名会报错
获取文件列表 listdir() glob()
os.listdir('.')
from pathlib import Path
from glob import glob
# 使用以上语句引入后 Path().glob() 和 glob() 均可匹配文件,生成列表
list1 = Path().glob('*.zip') #是一个生成器对象,可以迭代
for e in list1:
print(e) #是一个Pathlib对象
list2 = glob('*.1') #是一个列表
print(list2)
获取文件信息
Path() 对象可以获取文件信息
.name
文件全名.suffix
扩展名.stem
文件名
Path('test.txt').name
Path('test.txt').suffix
Path('test.txt').stem
移动文件
复制文件 shutil.copy()
#复制单个文件
shutil.copy('test.txt','dir11/')
#复制一组文件
for dir in glob('*.1'):
shutil.copy(dir,'test/')
删除文件 os.remove()
os.remove('1.txt') #删除该文件
Path('oh.1').unlink(missing_ok=False) #删除该文件
压缩文件 ZipFile() f.write()
from zipfile import ZipFile
with ZipFile('new.zip', 'w') as f:
for txt_file in Path().glob('*.1'):
print(txt_file.name + ' 压缩中 >>>')
f.write(txt_file)
解压文件 ZipFile() f.extractall()
unzip_pack = 'test.zip'
unzip_pack_stem = Path(unzip_pack).stem
with ZipFile(unzip_pack) as f:
# 解压到同名文件夹中,这里做了一个判断:文件夹是否存在
if os.path.exists(unzip_pack_stem) == False:
os.mkdir(unzip_pack_stem)
f.extractall(path= unzip_pack_stem)