鱼C论坛

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

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

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

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

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

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

高能预警~
知识点:



模块:
        模块就是可用代码段的打包。模块是一个包含所有你所定义的函数和变量的文件,它的后缀是(.py)。模块可以做到被别的程序所引入,以使用该模块中的函数功能。
import random                                #导入random模块。
        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()        #返回当前的工作目录
>>> import os
>>> os.getcwd()
'D:\\Python'


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


os.listdir(path = '.')       
#返回指定文件夹包含的文件,或者文件夹名字的列表。以开头字母排序。只支持在UNIX和Windows下使用。('.'表示当前目录,'..'表示上一级目录。)
>>> import os
>>> os.listdir("E:\\.")
['$RECYCLE.BIN', '360Downloads', 'C++学习视频', 'CloudMusic', 'java练习题和资料', 'Python', 'System Volume Information', 'WanyxGames', '实验.txt', '家庭组密码.txt', '结果.txt', '计算机组成原理笔记']

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


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


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


os.remove("path")
#用于删除指定路径的文件。如果path中没有文件名,那么抛出异常。在UNIX和Windows中有效。
>>> os.remove(r"F:\a\b\c\test.txt")
>>> os.remove(r"F:\a\b\c")
Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    os.remove(r"F:\a\b\c")
PermissionError: [WinError 5] 拒绝访问。: 'F:\\a\\b\\c'

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

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


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

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


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



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


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


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


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


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


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











OS.path模块的常用方法:

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

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

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


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

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


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

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


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

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


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

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


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


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

        参数:要知道最近访问时间的文件名。
        返回值:返回浮点型(float)秒数。
import time
>>> time.localtime(os.path.getatime(r"F:\a\b\c\test.txt"))
"""这里使用了time模块的localtime()函数来转换getatime的返回值"""
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)秒数。
import time
>>> time.localtime(os.path.getatime(r"F:\a\b\c\test.txt"))
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)秒数。
import time
>>> time.localtime(os.path.getmtime(r"F:\a\b\c\test.txt"))
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。
>>> os.path.exists(r"F:\a\b\c\test.txt")
True
>>> os.path.exists(r"F:\a\b\c\te.txt")
False
>>> os.path.exists(r"F:\a\b\c\d")
False


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


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


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


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


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


os.path.samefile(path1,path2)        #判断path1和path2两个路径是否指向同一个文件。
        参数:路径名。
        返回值:True、False。
>>> os.path.samefile(r"D:\Code Bolck\CodeBlocks\codeblocks.exe",r"D:\Code Bolck\CodeBlocks\codeblocks.exe")
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题作为栗子。
import os
def file_search(file_path,file_name):
    for dir_path,dir_names,filename in os.walk(file_path):
        if file_name in filename:
            print(os.path.join(dir_path,file_name))
i,j = input("请输入要查找的文件目录:"),input("请输入要查找的文件名称:")
file_search(i,j)

评分

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

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 20:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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