Python文件目录操作就是这么6
/前言/
对于学Python的人来说想必大家os这个模块不会陌生,还有一个与之紧密相关的便是sys,但是sys一般很少用,所以今天我们就来说说这两个模块到底有哪些神器的功能。
/sys/
sys模块包括了一组非常实用的服务,内含很多函数方法和变量,
用来处理Python运行时配置以及资源,从而可以与前当程序之外的系统环境交互。
也就是说他是一个很有用的模块,只是我们平时很少用到而已。
sys.argvsys.modulessys.exit(n)sys.pathsys.stdout.write('output')sys.stdin.readline()[:-1]sys.modules.keys()sys.modules.values()sys.exc_info()sys.hexversionsys.versionsys.api_versionsys.version_infosys.displayhook(value)sys.excepthook(type,value,callback)sys.getdefaultencoding()sys.getfilesystemencoding()sys.setdefaultencoding(name)sys.builtin_module_namessys.executablesys.getwindowsversion()sys.copyrightsys.byteordersys.exc_clear()sys.exec_prefixsys.stderrsys.stdinsys.stdoutsys.platformsys.maxunicodesys.maxintsys.call_tracing(func,args )sys._clear_type_cache()sys._current_frames()sys.dllhandlesys.dont_write_bytecodesys.getcheckinterval()sys.getdlopenflags()sys.getrefcount(对象)sys.getsizeof(对象[,默认] )sys._getframe([ 深度] )sys.getprofile()sys.gettrace()sys.getwindowsversion()
看到这么多方法大家是不是已经哭晕在厕所里了了,不着急,
小编在这里先给大家一个练手的好案例让大家开开荤:

那么这个案例实现的是什么功能了,大致就是每隔一秒打印一个#,好像进度条一样的说。
在这里就用到标准输出流和输出流刷新了,也算是超级简单的进度条了。
sys里面有几个可以表示脚本当前路径的函数,可以说是非常强大了,比如说:

大家可以看到,后面两个结果相同,说明后面两个效果一样吗,那可不一定。
不信,你可以看看我接下来的操作,让你怀疑人生:
创建两个py文件,你懂的,然后分别键入代码:
#cg.pyimport sysdef ff():print(sys.path[0],':',sys.argv[0],':',__file__)#sys.argv[0] 一般得到的是相对路径ff()#fd.pyimport cgcg.ff()

可以看到,最后的结果就是显然不一样了,那么这是什么原因产生的了,哦,
原来,在fd中导入cg执行的sys.argv[0]还是指的是运行的主文件fd.py,而file却输出的是cg.py.
顺便跟大家科普以下查看模块下有哪些方法的一个函数:dir()

所有的函数都打印出来了,当然,如果你想快速了解每个方法的用法,则可以使用help()函数:

可以说是很强大了。
接下来我们再来说说另一个非常牛逼的东西---------os。
/OS/
一、文件操作(os直属常用方法)
关闭文件描述符 hwos.close(hw)# 关闭所有文件描述符,从 hw1(包含) 到 hw2(不包含), 错误会忽略os.closerange(hw1,hw2)# 通过文件描述符改变当前工作目录os.fchdir(hw)# 改变一个文件的访问权限,该文件由参数hw指定,参数mode是Unix下的文件访问权限。os.fchmod(hw, mode)# 修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符hw指定。os.fchown(hw, id1, id2)# 强制将文件写入磁盘,该文件由文件描述符hw指定,但是不强制更新文件的状态信息。os.fdatasync(hw)#通过文件描述符hw 创建一个文件对象,并返回这个文件对象os.fdopen(hw[, mode[, bufsize]])#返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。os.fpathconf(hw, name)#返回文件描述符hw的状态,像stat()。os.fstat(hw)#返回包含文件描述符hw的文件的文件系统的信息,像 statvfs()os.fstatvfs(hw)#强制将文件描述符为hw的文件写入硬盘。os.fsync(hw)#裁剪文件描述符hw对应的文件, 所以它最大不能超过文件大小。os.ftruncate(hw,length)#复制文件描述符hwos.dup(hw)# 将一个文件描述符hw复制到另一个hw1os.dup2(hw,hw1)# 返回与终端hw(一个由os.open()返回的打开的文件描述符)关联的进程组os.tcgetpgrp(hw)# 设置与终端hw(一个由os.open()返回的打开的文件描述符)关联的进程组为hw1。os.tcsetpgrp(hw, hw1)# 返回唯一的路径名用于创建临时文件。os.tempnam([dir[, prefix]])# 返回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。os.tmpfile()# 为创建一个临时文件返回一个唯一的路径os.tmpnam()# 返回一个字符串,它表示与文件描述符hw 关联的终端设备。如果hw 没有与终端设备关联,则引发一个异常。os.ttyname(hw)# 删除文件路径os.unlink(path)# 返回指定的path文件的访问和修改的时间。os.utime(path, times)# 输出在文件夹中的文件名通过在树中游走,向上或者向下。os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])# 写入字符串到文件描述符hw中. 返回实际写入的字符串长度os.write(hw, str)# 获取指定路径的文件系统统计信息os.statvfs(path)# 返回当前工作目录os.getcwd()# 返回一个当前工作目录的Unicode对象os.getcwdu()# 如果文件描述符hw是打开的,同时与tty(-like)设备相连,则返回true, 否则False。os.isatty(hw)# 设置路径的标记为数字标记,类似 chflags(),但是没有软链接os.lchflags(path, flags)# 修改连接文件权限os.lchmod(path, mode)# 更改文件所有者,类似 chown,但是不追踪链接。os.lchown(path, uid, gid)# 返回path指定的文件夹包含的文件或文件夹的名字的列表。os.listdir(path)# 设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算;os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效os.lseek(fd, pos, how)# 打开一个文件,并且设置需要的打开选项,mode参数是可选的os.open(file, flags[, mode])# 打开一个新的伪终端对。返回 pty 和 tty的文件描述符。os.openpty()# 返回相关文件的系统配置信息。os.pathconf(path, name)# 用于分割文件路径的字符串os.pathsep# 获取当前目录的父目录字符串名:('..')os.pardir# 创建一个管道. 返回一对文件描述符(r, w) 分别为读和写os.pipe()# 从一个 command 打开一个管道os.popen(command[, mode[, bufsize]])# 字符串指示当前使用平台。win->'nt'; Linux->'posix'os.name# 从文件描述符hw中读取最多n个字节,返回包含读取字节的字符串,文件描述符hw对应文件已达到结尾, 返回一个空字符串。os.read(hw, n)#返回路径所在的根目录,主目录主文件os.walk(path)#返回路径下的目录和文件os.listdir(path)#切换当前程序操作的路径os.chdir(path)#重命名文件os.rename(oldfile,newfile)
二、路径操作
#将文件路径和文件名分割(会将最后一个目录作为文件名而分离)os.path.split(filename)#将文件路径和文件扩展名分割成一个元组os.path.splitext(filename)#返回文件路径的目录部分os.path.dirname(filename)#返回文件路径的文件名部分os.path.basename(filename)#将文件路径和文件名凑成完整文件路径os.path.join(dirname,basename)#获得绝对路径os.path.abspath(name)#把路径分割为挂载点和文件名os.path.splitunc(path)#规范path字符串形式os.path.normpath(path)#判断文件或目录是否存在os.path.exists()#如果path是绝对路径,返回Trueos.path.isabs()#返回path的真实路径os.path.realpath(path)#从start开始计算相对路径os.path.relpath(path[, start])#转换path的大小写和斜杠os.path.normcase(path)#判断name是不是一个目录,name不是目录就返回falseos.path.isdir()#判断name是不是一个文件,不存在返回falseos.path.isfile()#判断文件是否连接文件,返回booleanos.path.islink()#指定路径是否存在且为一个挂载点,返回booleanos.path.ismount()#是否相同路径的文件,返回booleanos.path.samefile()#返回最近访问时间 浮点型os.path.getatime()#返回上一次修改时间 浮点型os.path.getmtime()#返回文件创建时间 浮点型os.path.getctime()#返回文件大小 字节单位os.path.getsize()#返回list(多个路径)中,所有path共有的最长的路径os.path.commonprefix(list)#路径存在则返回True,路径损坏也返回Trueos.path.lexists#把path中包含的”~”和”~user”转换成用户目录os.path.expanduser(path)#根据环境变量的值替换path中包含的”$name”和”${name}”os.path.expandvars(path)#判断fp1和fp2是否指向同一文件os.path.sameopenfile(fp1, fp2)#判断stat tuple stat1和stat2是否指向同一个文件os.path.samestat(stat1, stat2)#一般用在windows下,返回驱动器名和路径组成的元组os.path.splitdrive(path)#遍历path,给每个path执行一个函数os.path.walk(path, visit, arg)#设置是否支持unicode路径名os.path.supports_unicode_filenames()
三、进程管理
# 创建一个软链接os.symlink(src, dst)# 创建硬链接,名为参数 dst,指向参数 srcos.link(src, dst)# 像stat(),但是没有软链接os.lstat(path)# 运行shell命令,直接显示os.system("bash command")# 改变当前进程的根目录os.chroot(path)#shell命令,不返回结果,但是可以进行读取os.popen(command).read()# 当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"os.linesep#路径连接符os.sep#从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。os.major(device)# 以major和minor设备号组成一个原始设备号os.makedev(major, minor)# 递归文件夹创建函数。像mkdir(),但创建的所有intermediate-level文件夹需要包含子文件夹。os.makedirs(path[, mode])# 从原始的设备号中提取设备minor号码(使用stat中的st_dev或者st_rdev field )。os.minor(device)# 以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。os.mkdir(path[, mode])# 创建命名管道,mode 为数字,默认为 0666 (八进制)os.mkfifo(path[, mode])# 创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。os.mknod(filename[, mode=0600, device])
四、环境参数
os.access(path, mode)os.chflags(path, flags)os.chmod(path, mode)os.chown(path, uid, gid)os.getlogin()os.cpu_count()os.urandom(n)os.environos.getenv('CYGWIN')os.environ.get('CYGWIN')os.environ.setdefault(key,value)os.getenvb('CYGWIN')
五、stat子库
#获取到的文件属性列表fileStats = os.stat(path)#获取文件的模式fileStats[stat.ST_MODE]#文件大小fileStats[stat.ST_SIZE]#文件最后修改时间fileStats[stat.ST_MTIME]#文件最后访问时间fileStats[stat.ST_ATIME]#文件创建时间fileStats[stat.ST_CTIME]#是否目录stat.S_ISDIR(fileStats[stat.ST_MODE])#是否一般文件stat.S_ISREG(fileStats[stat.ST_MODE])#是否连接文件stat.S_ISLNK(fileStats[stat.ST_MODE])#是否COCK文件stat.S_ISSOCK(fileStats[stat.ST_MODE])#是否命名管道stat.S_ISFIFO(fileStats[stat.ST_MODE])#是否块设备stat.S_ISBLK(fileStats[stat.ST_MODE])#是否字符设置stat.S_ISCHR(fileStats[stat.ST_MODE])
6、一键死机
为什么要说这个呢?完全是为了好玩,哈哈哈。
我们都知道os 能很轻松打开一个程序,只要你知道这个源程序根目录的位置。
所以我们一般都会:
os.system('notepad') #打开记事本os.system('start notepad')#打开记事本
这样可以很轻松打开一个记事本,那么我们要想让它无限打开。我给它整个死循环,给它个无限递归不就完了。是不是很简单了?
还有一种比较优雅的打开程序的方法,那就是popen方法:
pp=os.popen('notebook')不仅如此,我们还能看到它执行结果后的返回值。
print(pp.read())
哈哈,也是很666了。
/小结/
1、本文基于Python编程语言,主要介绍了Python操作文件目录的两个大库sys和os,在实际应用中十分的常用,希望大家了解。本文内容十分丰富,欢迎大家积极学习。
2、结合部分实际案例,图文并茂,帮助大家更好的理解文件操作。
PS:公号内回复「Python」即可进入Python 新手学习交流群,一起 100 天计划!
老规矩,兄弟们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!


【神秘礼包获取方式】
