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模块:

https://www.jianshu.com/p/e62b05f08179

复制目录或文件:

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中打开方式是必须的参数

python 相对目录的文件 python文件与目录_python 相对目录的文件

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下,后一个路径带"/",会报错不存在路径