详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
以下代码以Python3.6.1/windows10为例
Lessismore!
#!/usr/bin/envpython
#coding=utf-8
__author__='Luzhuo'
__date__='2017/5/7'
importos
defos_demo():
#执行命令
dirs=os.popen("dir").read()
print(dirs)
#打印目录树
dirs_info=os.scandir()
forinfoindirs_info:
print("文件名:{},路径:{},inode:{},文件夹?{},文件?{},链接?{}".format(info.name,info.path,info.inode(),info.is_dir(),info.is_file(),info.is_symlink()))
stats=info.stat()
print(">>>访问时间:{},修改时间:{},模式修改时间:{},大小:{}".format(stats.st_atime,stats.st_ctime,stats.st_mtime,stats.st_size))
importsignal
defos_func():
'''
操作系统模块
该模块下的方法,对各个版本的兼容不明确,须谨慎使用.
测试版本:Python:3.6.1Windows:Windows10,64bit
'''
#===系统===
strs=os.name#当前系统:Linux'posix'/Windows'nt'/'ce'/'java'
strs=os.sep#分隔符\\(windows:\\linux:/)
strs=os.pathsep#path变量分隔符;(windows:;linux::)
strs=os.linesep#换行分隔符\r\n(windows:/r/nlinux:\n)
dics=os.environ#查看系统环境变量(字典)
strs=os.getenv("Path",default=-1)#读取环境变量,没有返回None
os.putenv("Path","C:\\python")#添加环境变量(windows无效)
os.unsetenv("Path")#删除环境变量(windows不可用)
strs=os.getlogin()#当前登录的用户名
num=os.getpid()#当前进程PID
num=os.system("cmd")#执行操作系统命令,返回0/1(0执行正确;1执行错误)
strs=os.popen("dir").read()#执行系统命令,并去读结果
tups=os.times()#当前进程时间(user用户/system系统/children_user子用户(windews=0)/children_system子系统(windews=0)/elapsed过去时间)
bytes=os.urandom(10)#n字节用以加密的随机字符
num=os.cpu_count()#CUP数量
#===进程===
os.abort()#结束进程
#execl(file,*args)/execle/execlp/execlpe/execv/execve/execvp/execvpe//运行新程序替换当前进程
os.execl(r"C:\python",'python','hello.py','i')#(windows执行失败)
os._exit(0)#退出
os.kill(8480,signal.SIGTERM)#(系统)终止进程(需要导入:signal)SIGINT(终止进程)/SIGTERM(终止进程)/SIGKILL(终止进程)/SIGALRM(闹钟信号)
#===文件/文件夹===
strs=os.getcwd()#当前路径
bytes=os.getcwdb()#当前路径
os.chdir(r"C:\Windows")#切换路径
strs=os.curdir#当前目录.
strs=os.pardir#上级目录..
strs=os.sep#路径分隔符('/'or'\\')
bytes=os.fsencode(r"C:\c.obj")#(编码)文件路径字符串转为bytes类型=>b'C:\\c.obj'
strs=os.fsdecode(b"C:\c.obj")#(解码)文件路径转为strs类型=>'C:\\c.obj'
#chmod(path,mode,*,dir_fd=None,follow_symlinks=True)
os.chmod(r"C:\python\hello.py",777)#修改模式
os.link("file.txt","file.txt.link")#创建硬链接
os.symlink("file.txt","file.txt.link")#创建软链接(windows执行失败)
lists=os.listdir()#所有文件和文件夹(列表)".""..""D:"
#lstat(path,*,dir_fd=None)
tups=os.lstat(r"C:\c.obj")#状态信息列表
boolean=os.access(r"C:\c.obj",os.F_OK)#(文件/文件夹)权限测试(mode:F_OK存在?/R_OK可读?/W_OK可写?/X_OK可执行?)
#scandir(path='.')//DirEntry迭代器,文件目录
lists=os.scandir()
#st_atime(访问时间)/st_ctime(修改时间)/st_mtime(模式修改时间)/st_size(大小(字节bytes))
#st_uid(用户ID)/st_gid(用户组ID)
#st_ino(inode)/st_mode(模式)/st_dev(设备)/st_nlink(硬链接)
#count=cpu_count()#(系统)CPU线程数(非核数)
tups=os.stat(".")#获取状态信息,返回stat_result对象
#utime(path,times=None,*,ns=None,dir_fd=None,follow_symlinks=True)//更新文件的访问和修改时间
num=os.utime(r"C:\c.obj")
#walk(top,topdown=True,onerror=None,followlinks=False)//根目录(top)遍历目录树,返回迭代器(dirpath,dirnames[],filenames[]).
root,dirnames,filenames=os.walk(r"C:\python")
os.removedirs(r"c:\python")#删除多个文件夹(windews删除多个文件夹失败,单个成功)
#mkdir(path,mode=0o777,*,dir_fd=None)//创建单个目录,文件夹已存在,抛FileExistsError异常
os.mkdir("test")
#makedirs(name,mode=0o777,exist_ok=False)//创建(多个)文件夹
os.makedirs(r"./t1/t2/t3")
os.rmdir("test")#删除单个目录
#mknod(path,mode=0o600,device=0,*,dir_fd=None)//创建空文件(windows不可用)
os.mknod("test.txt")
#remove(path,*,dir_fd=None)
os.remove("test.txt")#删除文件
#rename(src,dst,*,src_dir_fd=None,dst_dir_fd=None)
os.rename("text.txt","file.txt")#重命名
os.renames("text.txt","file.txt")
#replace(src,dst,*,src_dir_fd=None,dst_dir_fd=None)//重命名,存在则替换
os.replace("text.txt","file.txt")
tups=os.stat(r"text.txt")#文件属性
#===文件读写===
#open(path,flags,mode=0o777,*,dir_fd=None)//打开文件fd:文件描述符
fd=os.open(r"C:\c.obj",os.O_RDWR|os.O_CREAT)
readfd,writefd=os.pipe()#打开管道,返回读取,写入(windows失败)
#fdopen(fd,*args,**kwargs)//打开(windews写入失败,读取""字符)
f=os.fdopen(readfd)
os.read(fd,150)#读取
os.write(fd,"String".encode("utf-8"))#写入
os.fsync(fd)#强行写入
os.ftruncate(fd,100)#裁剪文件
bytes=os.lseek(fd,10,os.SEEK_SET)#设置指针SEEK_SET(0开始)SEEK_CUR(1当前位置)SEEK_END(2末尾)
fd_temp=os.dup(fd)#副本
boolean=os.isatty(fd)#是否是tty设备
stat=os.fstat(fd)#状态信息
strs=os.device_encoding(fd)#返回终端字符编码,非终端None
os.close(fd)#关闭
os.closerange(fd,fd)#关闭并忽略错误
#===DirEntry===
fordirinos.scandir():
strs=dir.name#文件名
strs=dir.path#完整路径名
num=dir.inode()#inode编号
boolean=dir.is_dir()#是否是文件夹
boolean=dir.is_file()#是否是文件
boolean=dir.is_symlink()#是否是链接
tups=dir.stat()#状态信息的stat_result对象
#======================================================================
defpath_demo():
path=os.getcwd()#获取当前目录
print("路径:{}".format(path))
dirname=os.path.dirname(path)#获取文件夹名
print("文件夹名为:{}".format(dirname))
drive,path_t=os.path.splitdrive(path)#获取盘符
print("盘符为:{}".format(drive))
defpath_func():
'''
操作路径的函数
'''
paths=[r'file.txt',r"/python/lib/hello.py",r"/python/local/text.txt","C:/python/local","C:/python/file.txt"]
strs=os.path.abspath(paths[0])#绝对路径
strs=os.path.basename(paths[1])#文件名
strs=os.path.dirname(paths[1])#文件夹名
strs=os.path.join("C:\\",r"a.txt")#将路径组合返回
dirname,filename=os.path.split(paths[1])#分割路径(目录文件名)
strs,text=os.path.splitext(paths[1])#分离扩展名(前部分,扩展名)
drivename,pathname=os.path.splitdrive(paths[3])#分离目录(盘符,目录)
size=os.path.getsize(paths[0])#文件大小
strs=os.path.normcase(paths[1])#规范大小写(修改斜杠)
strs=os.path.normpath(paths[1])#规范斜杠(修改斜杠)
strs=os.path.realpath(paths[1])#规范名字(全名)
#relpath(paths[0],start=os.curdir)
strs=os.path.relpath(paths[1])#当前路径的文件相对路径=>'lib\\hello.py'
boolean=os.path.exists(paths[1])#路径是否存在
boolean=os.path.isabs(paths[1])#是否是绝对路径(不准)
boolean=os.path.isfile(paths[1])#是否是文件
boolean=os.path.isdir(paths[1])#是否是文件夹
boolean=os.path.islink(paths[1])#是否是软链接
boolean=os.path.ismount("C:\\")#是否是根结点
boolean=os.path.supports_unicode_filenames#Unicode是否可用作文件名
boolean=os.path.samefile(paths[0],paths[0])#是否指向同文件或目录
boolean=os.path.sameopenfile(os.open(paths[0],1),os.open(paths[0],1))#fd是否指向同一文件
boolean=os.path.samestat(os.stat(paths[0]),os.stat(paths[0]))#state是否指向同一文件
time_s=os.path.getatime(paths[0])#获取访问时间
time_s=os.path.getmtime(paths[0])#获取修改时间
time_s=os.path.getctime(paths[0])#元数据修改时间
#===================================================================================================
importpathlib
defpathlib_demo():
path=pathlib.Path().home()/"python"
path_iter=path.iterdir()#遍历目录
forpathinpath_iter:
file_bool=path.is_file
ifnotfile_bool:
continue
print(">>>{}".format(path))
f=path.open()#是文件就打开读点内容
data=f.readline()
print(data)
f.close()
defpathlib_func():
'''
适合于不同操作系统的类来对文件系统路径进行操作
'''
#===PurePath(纯路径)===
#PurePath(*pathsegments)//系统地灵分割
path_pure=pathlib.PurePath('hello.py')
path_pure=pathlib.PurePath('python','hello.py')
path_pure=pathlib.PurePath(pathlib.Path('python'),pathlib.Path('hello.py'))
#PurePosixPath(*pathsegments)//非windows文件系统路径
#PureWindowsPath(*pathsegments)//windows文件系统路径
#路径是不可变哈希的,同风格的路径是比较有序的
pathlib.PurePosixPath('hello')==pathlib.PurePosixPath('Hello')#=>Flase(PurePosixPath分大小写)
pathlib.PureWindowsPath('hello')==pathlib.PureWindowsPath('hello')#=>True(PureWindowsPath不分大小写)
pathlib.PureWindowsPath('hello')in{pathlib.PureWindowsPath('Hello')}#=>True
pathlib.PureWindowsPath('C:')True
#不同风格的路径不能比较有序
pathlib.PureWindowsPath('hello')==pathlib.PurePosixPath('hello')#=>False
#pathlib.PureWindowsPath('hello')('c:\\','python','hello.py')
drive=path_pure.drive#盘符=>'c:'
root=path_pure.root#根目录=>'\\'
driroot=path_pure.anchor#盘符+根目录=>'c:\\'
parents=path_pure.parents#父路径列表parents[0]=>PureWindowsPath('c:/python')
parent=path_pure.parent#父路径=>PureWindowsPath('c:/python')
name=path_pure.name#文件(夹)名
suffix=path_pure.suffix#扩展名
suffixs=path_pure.suffixes#扩展名列表
name=path_pure.stem#不带后缀名的文件(夹)名=>'hello'
path=path_pure.as_posix()#以/返回路径
path=path_pure.as_uri()#以fileURL方式返回路径,必须是绝对路径=>'file:///c:/python/hello.py'
path=path_pure.joinpath("a.txt","b.txt")#拼接路径=>PureWindowsPath('c:/python/hello.py/a.txt/b.txt')
path=path_pure.with_name("world.py")#更改路径文件(夹)名=>PureWindowsPath('c:/python/world.py')
path=path_pure.with_suffix(".txt")#更改扩展名,没有则添加
boolean=path_pure.match("*.py")#匹配通配符(从右侧进行匹配)(大小写的区分见上方比较代码)
boolean=path_pure.is_absolute()#是否是绝对路径(///c:/开头都被认为是绝对路径)
#===Path(具体路径)===
#Path(*pathsegments)
path=pathlib.Path('hello.py')
#PosixPath(*pathsegments)
#WindowsPath(*pathsegments)
path_s=path.cwd()#当前路径
home=path.home()#用户主目录
state=path.stat()#该路径的状态信息同os.stat()
state=path.lstat()#同stat(),目标是软链接将返回软链接信息
path.chmod(777)#修改权限模式同os.chmod()
path.lchmod(777)#同chmod(),目标是软链接将更改软链接模式
lists=path.glob(r'*.py')#迭代器,所有py文件(windows失效)
group=path.group()#文件的组(windows不可用)
iter=path.iterdir()#遍历目录(必须是目录)
#mkdir(mode=0o777,parents=False,exist_ok=False)
path.mkdir()#创建文件夹
path.rmdir()#删除文件夹
#open(mode='r',buffering=-1,encoding=None,errors=None,newline=None)//打开文件
f=path.open()
bytes=path.read_bytes()#读取文件内容
num=path.write_bytes(b"hello")#(覆盖)写入文件内容
#read_text(encoding=None,errors=None)
strs=path.read_text(encoding='utf-8')
#write_text(data,encoding=None,errors=None)
num=path.write_text("hello")
ow=path.owner()#该文件拥有者(windows不可用)
path.rename("new.txt")#重命名,目标存在则替换
path.replace("new.txt")#重命名,目标存在则替换
path_s=path.resolve()#绝对路径
path.symlink_to("hello.py",target_is_directory=False)#创建软链接,如果目标是目录,则(windows下)target_is_directory=True(windows失败)
path.unlink()#删除文件/文件软链接
#touch(mode=0o666,exist_ok=True)
path.touch()#创建文件
boolean=path.exists()#文件(夹)是否存在
boolean=path.is_dir()#是否是文件夹
boolean=path.is_file()#是否是文件
boolean=path.is_symlink()#是否是硬链接
boolean=path.is_block_device()#是否是块设备
boolean=path.is_char_device#是否是字符设备
boolean=path.samefile(path)#path是否是同一文件
if__name__=="__main__":
os_demo()
path_demo()
pathlib_demo()
#os_func()
#path_func()
#pathlib_func()
以上这篇详谈Python3操作系统与路径模块(os/os.path/pathlib)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。