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)
posted @ 2021-10-28 15:14  ConorBlog  阅读(382)  评论(0编辑  收藏  举报