鱼C论坛

 找回密码
 立即注册
查看: 2225|回复: 0

[技术交流] 28 文件系统:介绍一个高大上的东西 - 景命

[复制链接]
发表于 2017-7-28 18:46:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 景命 于 2017-7-28 18:45 编辑

高能预警~
知识点:



模块:
        模块就是可用代码段的打包。模块是一个包含所有你所定义的函数和变量的文件,它的后缀是(.py)。模块可以做到被别的程序所引入,以使用该模块中的函数功能。
  1. import random                                #导入random模块。
  2.         s = random. randint(1,10)        #导入random模块后就可以使用randint()方法。
复制代码




OS模块:
        os:operating system                #操作系统模块
        对于文件系统的访问来说,Python一般是提供os模块来实现。
        对于不同的系统(例如:Windows、Mac OS、Linux、UNIX),要使用使用不同的文件系统模块。但是Python是跨平台的,也就是同样的源代码在不同的系统下,都可以同样的实现。有了OS模块,我们不需要关心在不同的操作系统下要使用什么模块,OS模块会帮你选择正确的模块并调用。



绝对路径和相对路径:
        绝对路径:从盘符开始,例如"F:\a\b\c\test.txt"。
        相对路径:从当前路径开始,例如".\b\c\test.txt"



OS模块的常用方法:

os.getcwd()        #返回当前的工作目录
  1. >>> import os
  2. >>> os.getcwd()
  3. 'D:\\Python'
复制代码



os.chdir(path)        #用于改变当前的工作目录到path
        参数:改变到的工作目录的路径。
        返回值:如果允许访问返回True,否则返回False。
  1. >>> import os
  2. >>> os.chdir("E:\")
  3. >>> os.getcwd()
  4. 'E:\\'
复制代码



os.listdir(path = '.')       
#返回指定文件夹包含的文件,或者文件夹名字的列表。以开头字母排序。只支持在UNIX和Windows下使用。('.'表示当前目录,'..'表示上一级目录。)

  1. >>> import os
  2. >>> os.listdir("E:\\.")
  3. ['$RECYCLE.BIN', '360Downloads', 'C++学习视频', 'CloudMusic', 'java练习题和资料', 'Python', 'System Volume Information', 'WanyxGames', '实验.txt', '家庭组密码.txt', '结果.txt', '计算机组成原理笔记']

  4. >>> os.chdir(r"F:\a\b\c")                #更改当前的工作目录
  5. >>> os.getcwd()                        #查看当前的工作目录
  6. 'F:\\a\\b\\c'
  7. >>> os.listdir(".")                        #如果参数为“.”,那么返回当前工作目录下的所有文件。
  8. ['新建文本文档.txt']
复制代码



os.mkdir(path)                #创建单层目录(文件夹),如果该目录已存在那么抛出异常。
        参数:要创建的文件夹路径。
  1. >>> os.getcwd()                #可以看出当前的工作目录并不影响创建。
  2. 'E:\\'
  3. >>> os.mkdir("F:\\a")
  4. os.mkdir(r"F:\a\b")                #在文件夹a下在创建文件夹b
复制代码



os.makedirs(path)
#用于递归创建多层文件目录,如果该目录已存在那么抛出异常,注意:“E:\\a\\b”和“E:\\a\\c”并不会有冲突。

  1. >>> os.makedirs(r"F:\a")                        #可以创建单层目录。
  2. >>> os.makedirs(r"F:\a\b\c")                #也可以创建多层目录。
复制代码



os.remove("path")
#用于删除指定路径的文件。如果path中没有文件名,那么抛出异常。在UNIX和Windows中有效。

  1. >>> os.remove(r"F:\a\b\c\test.txt")
  2. >>> os.remove(r"F:\a\b\c")
  3. Traceback (most recent call last):
  4.   File "<pyshell#32>", line 1, in <module>
  5.     os.remove(r"F:\a\b\c")
  6. PermissionError: [WinError 5] 拒绝访问。: 'F:\\a\\b\\c'
复制代码


os.rmdir(path)               
#用于删除指定路径的目录。如果文件夹内不为空(文件夹中有文件夹也不行)那么抛出异常。

        参数:要删除文件夹的路径。
  1. >>> os.rmdir(r"F:\a")
  2. Traceback (most recent call last):
  3.   File "<pyshell#2>", line 1, in <module>
  4.     os.rmdir(r"F:\a")
  5. OSError: [WinError 145] 目录不是空的。: 'F:\\a'
  6. >>> os.rmdir(r"F:\a\b\c")
复制代码



os.removedirs(path)
#递归删除目录,从子目录到父目录逐层尝试删除,遇到非空目录会抛出异常。

        参数:要删除的目录。
  1. >>> os.removedirs(r"F:\a\b\c")                #会删除文件夹b和文件夹c,但是文件夹a不会删除。
  2. >>> os.removedirs(r"F:\a")
复制代码



os.rename(src,dst)        #将目录名src修改为dst,如果文件名dst存在那么抛出异常。
        参数
                src:要修改的目录名。
                dst:修改后的目录名。
  1. >>> os.rename(r"F:\a\b\3",r"F:\a\b\c")        #可以看到src和dst参数可以是路径。
  2. >>> os.rename(r"F:\a\b\c\新建文本文档.txt",r"F:\a\b\c\test.txt")        #也可以修改文件名。
复制代码




os.systen(command)        #运行系统的shell命令。
        参数:系统命令
  1. >>> os.system("cmd")                #打开cmd窗口。
  2. -1073741510
  3. >>> os.system("calc")                #打开计算器窗口。
  4. -1073741510
复制代码



os.curdir                #指代当前目录(".")
  1. >>> os.listdir(".")                        #查看当前目录中的所有文件
  2. ['新建文本文档.txt']
  3. 规范的写法是下边的,因为在其他系统中可能就不是"."指代当前目录了。
  4. >>> os.listdir(os.curdir)                #用os.curdir替代了(".")。
  5. ['新建文本文档.txt']
复制代码



os.pardir                #指代上一级目录("..")
  1. >>> os.getcwd()                #查看当前工作目录。
  2. 'F:\\a\\b\\c'
  3. >>> os.listdir(os.pardir)        #查看当前工作目录的上一级目录中的所有文件。
  4. ['c', 'c1.txt']
复制代码



os.sep                #输出操作系统特定的路径分隔符(Win下为'\\',Linux下为'/')
  1. >>> os.sep
  2. '\\'
复制代码



os.linesep        #输出当前平台所使用的行终止符(Win下为'\r\n',Linux下为'\n')
  1. >>> os.linesep
  2. '\r\n'
复制代码



os.name                #输出当前使用的操作系统(包括:'posix','nt','mac','os2','ce','java')
  1. >>> os.name
  2. 'nt'                        #nt代表Windows操作系统。
复制代码












OS.path模块的常用方法:

os.path.basename(path)               
#将目录中的路径去掉,只留下文件名。不会判断文件或者路径是否存在

        参数:只是一个路径。
        返回值:返回文件名组成的字符串。
  1. >>> os.path.basename(r"F:\a\b\c1.txt")
  2. 'c1.txt'
  3. >>> os.path.basename(r"F:\as\bs\ca1.mp3")       
  4. 'ca1.mp3'                #只会去掉目录中的路径,不会真正的去访问此路径。

  5. >>> os.path.basename(r"F:\a\b\c")
  6. 'c'                        #如果参数中没有文件名,那么返回最后一层目录名。
复制代码



os.path.dirname(path)
#将目录中的文件名去掉,只留下路径。不会判断文件或者路径是否存在

        参数:字符串形的路径名。
        返回值:返回路径名所组成的字符串。
  1. >>> os.path.dirname(r"F:\a\b\c1.txt")
  2. 'F:\\a\\b'
  3. >>> os.path.dirname(r"F:\as\bs\ca1.mp3")
  4. 'F:\\as\\bs'
复制代码



os.path.join(path1[,path2[,……]])       
#把path1、path2、……各个部分组成一个路径。不会判断文件或者路径是否存在

        参数:字符串形的路径名。
        返回值:返回路径名所组成的字符串。
  1. >>> os.path.join("a","b","c")                #将参数组成一个路径。
  2. 'a\\b\\c'
  3. >>> os.path.join("D:\","a","b","c")       
  4. 'D:\\a\\b\\c'        #如果要想在路径前面加上盘符的话,需要自己写"D:\",也就是要自己加"\"
复制代码



os.path.split(path)               
#分割文件名和路径,返回(f_path,f_name)元祖。如果完全使用目录,它也会将最后一个目录作为文件名分离出来,且不会判断文件或者路径是否存在

        参数:字符串行的路径名。
        返回值:返回由文件路径,和文件名(f_path,f_name)组成的元组。
  1. >>> os.path.split(r"D:\a\b\c\ss.txt")
  2. ('D:\\a\\b\\c', 'ss.txt')                        #正常分离出路径和文件名。
  3. >>> os.path.split(r"D:\a\b\c")
  4. ('D:\\a\\b', 'c')        #参数完全为路径的情况下,会将最后一层的路径分离出来作为文件名。
复制代码



os.path.splitext(path)       
#分离文件名(也可以是目录)与扩展名,返回(f_path,f_extension)元组。

        参数:字符串行的路径名。javascript:;
        返回值:返回由文件路径,和文件名后缀名(f_path,f_extension)组成的元组。
  1. >>> os.path.splitext(r"F:\as\bs\ca1.mp3")
  2. ('F:\\as\\bs\\ca1', '.mp3')                #将路径名和文件名作为一个元素,后缀名作为一个元素。
复制代码



os.path.getsize(file)                #返回指定文件的尺寸,单位是字节。
        参数:要知道尺寸的文件名。
        返回值:返回整形(int)形的文件字节数。
  1. >>> os.path.getsize(r"F:\a\b\c\abc.txt")
  2. 22
复制代码



os.path.getatime(file)               
#返回指定文件,最近的访问时间。(浮点型秒数,可用time块的gmtime()和localtime()函数换算)

        参数:要知道最近访问时间的文件名。
        返回值:返回浮点型(float)秒数。
  1. import time
  2. >>> time.localtime(os.path.getatime(r"F:\a\b\c\test.txt"))
  3. """这里使用了time模块的localtime()函数来转换getatime的返回值"""
  4. time.struct_time(tm_year=2017, tm_mon=7, tm_mday=17, tm_hour=16, tm_min=33, tm_sec=42, tm_wday=0, tm_yday=198, tm_isdst=0)
复制代码



os.path.getctime(file)               
#返回指定文件的创建时间。(浮点型秒数,可用time块的gmtime()和localtime()函数换算)

        参数:要知道创建时间的文件名。
        返回值:返回浮点型(float)秒数。
  1. import time
  2. >>> time.localtime(os.path.getatime(r"F:\a\b\c\test.txt"))
  3. time.struct_time(tm_year=2017, tm_mon=7, tm_mday=17, tm_hour=16, tm_min=33, tm_sec=42, tm_wday=0, tm_yday=198, tm_isdst=0)
复制代码



os.path.getmtime(file)               
#返回指定文件最新的修改时间。(浮点型秒数,可用time块的gmtime()和loca
ltime()函数换算)
        参数:文件名(字符串形)。
        返回值:返回浮点型(float)秒数。
  1. import time
  2. >>> time.localtime(os.path.getmtime(r"F:\a\b\c\test.txt"))
  3. time.struct_time(tm_year=2017, tm_mon=7, tm_mday=17, tm_hour=16, tm_min=35, tm_sec=13, tm_wday=0, tm_yday=198, tm_isdst=0)
复制代码



os.path.exists(path)                #判断指定路径(文件或者目录)是否存在。
        参数:文件或路径。
        返回值:True、False。
  1. >>> os.path.exists(r"F:\a\b\c\test.txt")
  2. True
  3. >>> os.path.exists(r"F:\a\b\c\te.txt")
  4. False
  5. >>> os.path.exists(r"F:\a\b\c\d")
  6. False
复制代码



os.path.isabs(path)                        #判断指定路径是否为绝对路径。
        参数:路径名。
        返回值:True、False。
  1. >>> os.path.isabs(r"F:\a\b\c\d")
  2. True
  3. >>> os.path.isabs(r".\b\c\d")
  4. False
复制代码



os.path.isdir(path)                                #判断指定路径是否存在且是一个目录。
        参数:路径名。
        返回值:True、False。
  1. >>> os.path.isdir(r".")
  2. True
  3. >>> os.path.isdir(r".\s\d")
  4. False
复制代码



os.path.isfile(path)                        #判断指定路径是否存在且是一个文件。
        参数:路径名。
        返回值:True、False。
  1. >>> os.path.isfile(r".\test.txt")
  2. True
复制代码



os.path.islink(path)                        #判断一个路径是否存在且是一个符号链接(快捷方式)。
        参数:路径名。
        返回值:True、False。
  1. >>> os.path.islink(r"D:\Code Bolck\CodeBlocks\codeblocks.exe")
  2. False
复制代码



os.path.ismount(path)                        #判读指定路径是否存在且是一个挂载点("E:\\")。
        参数:路径名。
        返回值:True、False。
  1. >>> os.path.ismount("E:\")
  2. True
  3. >>> os.path.ismount("E:\\Python")
  4. False
复制代码



os.path.samefile(path1,path2)        #判断path1和path2两个路径是否指向同一个文件。
        参数:路径名。
        返回值:True、False。
  1. >>> os.path.samefile(r"D:\Code Bolck\CodeBlocks\codeblocks.exe",r"D:\Code Bolck\CodeBlocks\codeblocks.exe")
  2. True                #判断文件路径和文件的快捷方式是否指向同一个文件。
复制代码




os.walk()                #输出目录中的所有文件夹路径,文件夹名字,文件名。
        具体的我也不太理解,自己动手打打就懂了。
        参数:
                top -- 根目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名】。
                topdown --可选,为True或者没有指定, 一个目录的的3-元组将比它的任何子文件夹的3-元组先产生 (目录自上而下)。如果topdown为 False, 一个目录的3-元组将比它的任何子文件夹的3-元组后产生 (目录自下而上)。
                onerror -- 可选,是一个函数; 它调用时有一个参数, 一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。
                onerror -- 可选,是一个函数; 它调用时有一个参数, 一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。

#就拿动动手的第0题作为栗子。
  1. import os
  2. def file_search(file_path,file_name):
  3.     for dir_path,dir_names,filename in os.walk(file_path):
  4.         if file_name in filename:
  5.             print(os.path.join(dir_path,file_name))
  6. i,j = input("请输入要查找的文件目录:"),input("请输入要查找的文件名称:")
  7. file_search(i,j)
复制代码

评分

参与人数 1鱼币 +6 收起 理由
小甲鱼 + 6

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-26 09:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表