Python os 模块提供了非常丰富的方法用来处理文件和目录
常用方法
getcwd()
获取当前工作路径 current working directory
imort os
print(os.getcwd()) # '/Users/xyq/PycharmProjects'
listdir()
获取指定文件夹包含的文件或文件夹的名字的列表。
os.listdir(path)
path:目录路径,可以省略,待表当前路径
print(os.listdir()) # ['test_result.txt', '.DS_Store', 'file.py', 'test.txt', 'venv', '.idea']
print(os.listdir("/Users/xyq/PycharmProjects/")) # ['study', '.DS_Store', 'InterfaceFrameExcel']
chdir()
切换工作目录
os.chdir("/Users/xyq/PycharmProjects/test")
print(os.getcwd()) # '/Users/xyq/PycharmProjects/study'
mkdir()
创建一个目录
os.mkdir("test") # 创建test文件目录
os.mkdir("test") # 重复创建报错FileExistsError: [Errno 17] File exists: 'test'
makedirs()
创建多级目录,父目录不存在,递归生成
os.makedirs("dev/test")
print(os.listdir()) # dev/test目录生成
rmdir()
删除单级目录,若目录不为空会报错
os.rmdir("test")
print(os.listdir()) # test目录删除
rmdir()
removedirs()
删除多级目录,目录为空,删除,递归到上一级目录,若也为空,删除,依次类推
若目录不为空,则不删除
os.removedirs("dev/test") # dev/test目录删除
remove()
remove(filename)
删除文件,不能删除目录
os.remove("test_result.txt") # test_result.txt文件删除
rename()
os.rename(oldname,newname)
重命名文件或者文件夹
os.rename("test","txt") # 文件夹test重命名为txt
os.rename("1.doc","1.txt") # 文件1.doc重命名为1.txt
stat()
os.stat(path)
查看文件信息
print(os.stat("1.txt")) # 展示文件信息os.stat_result(st_mode=33188, st_ino=12899347922, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=0, st_atime=1593495758, st_mtime=1593495758, st_ctime=1593498729)
system()
os.system(command)
运行shell命令
print(os.system("ls")) #执行shell中ls命令
os.path
path.exists(“path”)
判断目录是否存在
path:目录路径
print(os.path.exists("venv")) # True
path.isdir(“path”)
path:目录路径
判断是否是目录
print(os.path.isdir("venv")) # True
path.isfile(“filename”)
判断是否是文件
print(os.path.isfile("venv")) # False
属性
os.curdir
返回.获取当前路径
os.pardir
返回…获取当前目录的父目录(上一级目录)
print(os.curdir()) # '.'
print(os.pardir()) # '..'
os.chdir(os.pardir) # 切换到上一级目录
print(os.getcwd()) # '/Users/xyq/PycharmProjects'
os.chdir("study") # 切换到study目录
print(os.getcwd()) # '/Users/xyq/PycharmProjects/study'
print(os.listdir(".")) # 查看当前目录列表['test_result.txt', '.DS_Store', 'file.py', 'test.txt', 'venv', '.idea']
print(os.listdir("..")) # 查看上级目录列表['study', '.DS_Store', 'InterfaceFrameExcel']
os.name
返回当前操作系统
os.sep
返回操作系统特定路径分割符
os.linesep
返回换行分隔符
os.pathsep
返回分割文件路径的字符串
os.environ
返回环境变量
print(os.name) # 'posix'
print(os.sep) # '/'
print(os.linesep) # '\n'
print(os.pathsep) # ':'
print(os.environ) # 正常返回环境变量
练习
统计当前目录下有多少文件或目录
import os
count_path = 0
count_file = 0
for i in os.listdir():
if os.path.isdir(i):
count_path += 1
elif os.path.isfile(i):
count_file += 1
print(f"当前目录有{count_path}个目录,有{count_file}个文件")
# 当前目录有2个目录,有5个文件
删除某个目录下所有txt文件
import os
# 造数据,test目录下写入txt文件和其他文件和目录
os.mkdir("test")
os.chdir("test")
for i in range(1,6):
fp = open(str(i) + ".txt","w")
fp.close()
fp = open(str(i) + ".doc", "w")
fp.close()
os.mkdir(str(i))
# 查看造的数据
print(os.listdir())
for i in os.listdir():
if os.path.isfile(i):
if i[int(i.rfind('.')):] == ".txt":
os.remove(i)
# 查看删除后结果
print(os.listdir()) # 删除全部.txt文件
在当前目录下找到1小时内所有新建的文件
import os,time
result = []
os.chdir("txt")
for i in os.listdir():
if os.path.isfile(i):
if time.time() - os.stat(i).st_ctime < 3600:
result.append(i)
print(result) # ['result.txt', '1.txt']
批量修改文件名,既可以添加指定字符串,也可以删除指定字符串
import os
os.chdir("test")
# 构造数据
# for i in "abc":
# fp = open(i+".txt","w")
# fp.close()
set_str = "python_"
new_name = ""
flag = input("请输入flag,1:添加python_,2:删除python_")
for i in os.listdir():
if flag == "1":
new_name = set_str + i
elif flag == "2":
new_name = i[len(set_str):]
os.rename(i,new_name)