一、os操作
1、system()在python中执行系统命令
# os.system("ifconfig") # os.system("touch 1.txt") # os.system("rm -rf 1.txt")
2、popen() 执行系统命令返回对象,通过read方法读出字符串
防止字符串乱码,使用popen进行操作
obj = os.popen("ifconfig") # 显示的时候,按照utf-8进行转换,默认windows是gbk的编码集 res = obj.read() print(res)
3、listdir() 获取指定文件夹中所有内容的名称列表
lst = os.listdir(".") # . 当前目录 lst = os.listdir("..") # .. 上一级目录 lst = os.listdir("/home/wangwen/") print(lst)
4、getcwd() 获取当前文件所在的默认路径 (单纯的路径)
res = os.getcwd() print(res)
5、路径 + 文件
print(__file__)
# python 终端执行报错: 因为__file __显示文件路劲,没有在文件里面执行,直接终端执行肯定报错.
6、chdir() 修改当前文件工作的默认路径
os.chdir("/home/kxq/kxq/temp") # os.system("mkdir ceshi1") os.system("rm -rf ceshi1")
7、environ 获取或修改环境变量
print(os.environ)
二、os和shutil
1、os
# os只能对文件进行新建/删除 创建目录 删除目录,不能对文件进行复制/移动操作,故引出shutil
import os os.chdir("/home/kxq/kxq/temp") # os -> 新建/删除 #os.mknod 创建文件 # os.mknod("1.txt") #os.remove 删除文件 # os.remove("1.txt") #os.mkdir 创建目录(文件夹) # os.mkdir("ceshi100") #os.rmdir 删除目录(文件夹) # os.rmdir("ceshi100") #os.rename 对文件,目录重命名 # os.rename("111.txt","123.py") #os.makedirs 递归创建文件夹 # os.makedirs("a/b/c/d/e") #os.removedirs 递归删除文件夹(空文件夹) # os.removedirs("a/b/c/d/e")
2、shutil -> 复制/移动
1、copyfileobj(fsrc, fdst[, length=16*1024])
# 复制文件 (length的单位是字符(表达一次读多少字符)) # 单纯复制文件的内容
fp1 = open("123.py",mode="r",encoding="utf-8") fp2 = open("lianxi1.php",mode="w",encoding="utf-8") shutil.copyfileobj(fp1,fp2)
2、copyfile(src,dst)
#单纯的仅复制文件内容 , 底层调用了 copyfileobj ***
shutil.copyfile("lianxi1.php","lianxi2.py")
3、copymode(src,dst)
#单纯的仅复制文件权限 , 不包括内容 (虚拟机共享目录都是默认777)
shutil.copymode("123.py","456.py") copystat(src,dst) #复制所有状态信息,包括权限,组,用户,修改时间等,不包括内容 *** shutil.copystat("123.py","lianxi2.py")
4、copy(src,dst)
#复制文件权限和内容 ***
shutil.copy("456.py","lianxi3.html")
5、copy2(src,dst)
#复制文件权限和内容,还包括权限,组,用户,时间等 ***
shutil.copy2("456.py","lianxi4.css")
7、删除/移动(文件和文件夹) ***
7.1、copytree(src,dst)
#拷贝文件夹里所有内容(递归拷贝)
shutil.copytree("lianxi100","lianxi101")
7.2、rmtree(path)
#删除当前文件夹及其中所有内容(递归删除)
shutil.rmtree("lianxi101")
7.3、move(path1,paht2)
#移动文件或者文件夹
shutil.move("lianxi1.php","..") # 移动文件 shutil.move("lianxi100","../lianxi1000") # 移动并改名;
三、os path路径模块
import os
1、basename() 返回文件名部分 *
strvar = "/home/kxq/kxq/temp/20200801/1.py" res = os.path.basename(strvar) print(res) # 1.py
2、dirname() 返回路径部分 *
res = os.path.dirname(strvar) print(res) # /home/kxq/kxq/temp/20200801
3、split() 将路径拆分成单独的文件部分和路径部分 组合成一个元组
tup = os.path.split(strvar) print(tup)
4、join() 将多个路径和文件组成新的路径 可以自动通过不同的系统加不同的斜杠
path1 = "ceshi1" path2 = "kxq" path3 = "lianxi1.py" pathvar = path1 + os.sep + path2 + os.sep + path3 # pathvar = path1 + "/" + path2 + "/" + path3 pathvar = os.path.join(path1,path2,path3) print(pathvar)
5、splitext() 将路径分割为后缀和其他部分 (了解)
strvar = "/home/wangwen/mywork/ceshi110.html" res = os.path.splitext(strvar) print(res) # ('/home/wangwen/mywork/ceshi110', '.html')
可以使用split切割出后缀
lst = strvar.split(".") print(lst[-1])
6、getsize() 获取文件的大小 ***
res = os.path.getsize("1.py") # 文件夹不能计算. res = os.path.getsize("os") print(res)
7、isdir() 检测路径是否是一个文件夹 *
strvar = "/home/kxq/kxq/temp/20200801/kxq" res = os.path.isdir(strvar) print(res)
8、isfile() 检测路径是否是一个文件 *
strvar = "/home/kxq/kxq/temp/20200801/kxq" res = os.path.isfile(strvar) print(res)
9、islink() 检测路径数否是一个链接 *
strvar = "/home/kxq/kxq/temp/20200801/kxq" res = os.path.islink(strvar) print(res)
10、stat 文件 查看当前文件的时间属性
11、getctime、getmtime、getatime
import time #getctime() [windows]文件的创建时间,[linux]权限的改动时间(返回时间戳) * res = os.path.getctime("123.py") #getmtime() 获取文件最后一次修改时间(返回时间戳) * res = os.path.getmtime("123.py") #getatime() 获取文件最后一次访问时间(返回时间戳) * res = os.path.getatime("123.py") str_time = time.ctime(res) print(str_time)
12、exists() 检测指定的路径是否存在 *
strvar = "/home/wangwen/mywork/wangwen11322132" res = os.path.exists(strvar) print(res)
13、isabs() 检测一个路径是否是绝对路径 *
pathvar = "." res = os.path.isabs(pathvar) print(res)
14、abspath() 将相对路径转化为绝对路径 *
pathnew = os.path.abspath(pathvar) print(pathnew) if not os.path.isabs(pathvar): pathnew = os.path.abspath(pathvar) print(pathnew)
15、练习:计算文件夹的大小
import os pathvar = "/mnt/hgfs/python31_gx/day19/ceshi100" # 基本写法 lst = os.listdir(pathvar) print(lst) # ['1.py', '2.py', '3.py', 'ceshi200'] size = 0 for i in lst: # 拼接路径 pathnew = os.path.join(pathvar,i) # 判断是否是文件 if os.path.isfile(pathnew): print(i,"[文件]") size += os.path.getsize(pathnew) # 判断是否是文件夹 elif os.path.isdir(pathnew): print(i,"[文件夹]") print(size) """不确定有多少层级的情况下,使用递归""" # 递归计算文件夹的大小 def getallsize(pathvar): size = 0 # 获取当前文件夹中所有内容 lst = os.listdir(pathvar) # 循环列表 for i in lst: # 拼接完整路径 pathnew = os.path.join(pathvar,i) # 判断是否是文件或者文件夹 if os.path.isfile(pathnew): size += os.path.getsize(pathnew) elif os.path.isdir(pathnew): # 如果是文件夹,继续调用函数. size += getallsize(pathnew) # 返回最后的结果 return size res = getallsize(pathvar) print(res)