1.命令行操作目录和文件是调用了系统调用,并非直接操作;python中os模块同理,调用系统调用。
2.操作文件和目录的函数一部分在os模块中,一部分在os.path模块中
3.一些很基本的文件操作os模块中没有提供,如复制文件,shutil模块作为os模块的补充,提供很多实用函数
4.os模块的某些函数与操作系统相关;明显看到linux中对文件权限、文件用户的操作比windows中更多;os模块中大量函数都只支持linux中操作。
5.以下均为Windows环境下的操作:
一 目录和文件操作
https://www.runoob.com/python3/python3-os-file-methods.html https://www.runoob.com/python3/python3-os-path.html
https://www.liaoxuefeng.com/wiki/1016959663602400/1017623135437088
os模块
目录操作:
os.mkdir(path) # 创建目录
os.rmdir(path) # 删除空目录
os.listdir(path) # 获取目录下所有文件夹、文件;得到的只是文件名而不是文件路径
文件操作:
os.open(path,mode) # mode是必须的,os.open和内置函数open不同
os.close(path) # 关闭文件
os.remove(path) # 删除文件
os.rename(src,des) # 重命名文件
注意:
os.listdir(path) # 返回path下的所有目录名、文件名;但不会递归访问子目录
os.walk(path) # 返回path下所有所有目录名、文件名;包含子孙目录中的
# root为当前目录的路径,dirs当前目录下的子目录,files为当前目录下的文件
# for 循环会WFS遍历子目录
for root, dirs, files in os.walk(".", topdown=False):
for name in files:
print(os.path.join(root, name))
for name in dirs:
print(os.path.join(root, name))
shutil模块:
复制目录或文件:
shutil.copy(src) # 复制文件
shutil.copyfile(src,des) # 复制文件的内容到另一文件
shutil.copytree(src,des) # 复制整个目录
删除目录:
shutil.rmtree(path) # 删除整个目录及其中的文件
移动目录或文件:
shutil.move(src,des) # 移动目录和文件
二 路径操作:
os.path模块:
os.path模块中的函数,都只是对路径进行操作,用于获取信息或判断,并不对路径表示的目录或文件本身进行操作
os.getcwd() # 获取当前文件的绝对路径
os.path.adspath(path) # 获取路径的绝对路径,如'.'、'..'
os.path.join(path1,path2) # 合并路径
os.path.split(path) # 拆分路径;分为两部分,后一个为原路径中最后一部分
os.path.splitdrive(path) # 拆分路径;分为两部分,前一个为盘符,用于windows中
os.path.exist(path) # 判断路径是否存在
os.path.isabs(path) # 判断是否为绝对路径
os.path.isfile(path) # 判断是否为文件
os.path.isdir(path) # 判断是否为目录
os.path.dirname(path) # 返回文件的目录名
os.path.basename(path) # 返回文件名
os.path.splitext(path) # 获取文件扩展名,包含点号
os.path.getsize(path) # 获取文件的大小,字节;
注意:
os.path.getsize是对文件内容大小的判断,可用于文件判空
三 os.open与内置函数open的区别
注意:导入os模块时,不能写"from os import *",否则os.open会覆盖内置函数open,导致调用出错
内建函数open和io.open是同一个函数,返回值是类文件对象file-like object;os.open返回值是文件描述符;内建函数open是对os.open进行了封装,os.open是内建函数open的底层实现。
内建函数open的参数,可以是文件名也可以是os.open返回的文件描述符,内建函数open中打开方式是可选参数,默认为’r’;os.open中打开方式是必须的参数
fd=os.open('../test/log2',os.O_RDWR|os.O_CREAT)
os.write(fd,'test'.encode('utf-8')) # 字节流写入
bytes1=os.read(fd,10) # 字节流读取
print(bytes1) # b'test'
os.read、os.write都是操作的字节流,可见它们应该是file.read、file.write的底层操作。
补充2:
os.getcwd()
这个获取的不是.py文件的绝对路径,而是启动项目时,命令行工作路径。如:pycharm中就是项目根目录。
补充3:
os.path.join()
Ubuntu下,后一个路径带"/",会报错不存在路径