zoukankan      html  css  js  c++  java
  • 文件目录操作

    文件及目录操作

    在变量、序列和对象中存储的数据总是暂时的,程序结束后就会丢失,为了长时间的保存程序中的数据,需要将程序中的数据保存到磁盘文件中

    基本文件操作

    在python中,想要操作文件需要先创建或者打开指定的文件并创建文件对象,可以通过内置的open()函数实现

    file:被创建的文件对象

    filename:要创建或打开文件的文件名称,需要使用单引号或双引号括起来,如果要打开的文件夹和当前文件在同一个目录下,那么直接写文件名即可,否则需要指定完整路径

    mode:可选参数,用于指定文件的打开模式,详细可见下表,默认的大佬模式为只读(r)

    buffering:可选参数,用于指定读写文件的缓冲模式,值为0表达式不缓存,值为1表示缓存,如果大于1,则表示缓冲区的大小,默认为缓存模式

    # 基本语法格式
    file = open(name[, mode[, buffering]])
    

    mode参数的参数值说明

    说明 注意
    r 以只读模式打开文件,文件的指针会放在文件的开头 文件必须存在
    rb 以二进制格式打开文件,并且采用只读模式,文件的指针将会放在文件的开头,一般用于非文本文件,如图片,声音等 文件必须存在
    r+ 打开文件后,可以读取文件内容,也可以写入新的内容覆盖原有内容(从文件开头进行覆盖) 文件必须存在
    rb+ 以二进制格式打开文件,并且采用读写模式,文件的指针将会放在文件的开头,一般用于非文件文件,如图片,声音等 文件必须存在
    w 以只写模式打开 文件存在,则将其覆盖,否则创建新文件
    wb 以二进制格式打开文件,并且采用只写模式,一般用于非文本文件,如图片,声音等 文件存在,则将其覆盖,否则创建新文件
    w+ 打开文件后,先清空原有内容,使其变为一个空的文件,对这个空文件有读写权限 文件存在,则将其覆盖,否则创建新文件
    wb+ 以二进制格式打开文件,并且采用度读写模式,一般用于非文本文件,如图片,声音等 文件存在,则将其覆盖,否则创建新文件
    a 以追加模式打开一个文件,如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入
    ab 以二进制格式打开文件,并且采用追加模式,如果该文件存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入
    a+ 以读写模式打开文件,如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于读写
    ab+ 以二进制格式打开文件,并且采用追加模式,如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被希尔到已有内容之后),否则,创建新文件用于读写

    打开文件并读取操作

    D:python est1data.txt:表示文件绝对路径,在此目录下创建一个data.txt文件,输入数据123456

    使用open方法打开文件后,需及时进行关闭,以免对文件造成不必要的破坏

    # 创建一个文件对象
    file = open(r'D:python	est1data.txt')
    # 使用read方法读取文件内容,read中可以指定读取的字符个数
    print(file.read(5))
    # 关闭文件对象
    file.close()
    
    # 以只读模式打开二进制图片文件
    image = open(r'D:python	est1图像.jpg', mode='rb')
    # 以二进制读取文件内容,将图片装换为二进制
    print(image.read())
    # 关闭文件对象
    image.close()
    

    使用with打开文件

    打开文件后,要及时将其关闭,如果忘记关闭可能会带来意想不到的问题,另外,如果在打开文件时抛出了异常,那么将导致文件不能被及时关闭。为了更好的避免此类问题发生,可以使用python提供的with语句,从而实现在处理文件时,无论是否抛出异常,都能保证with语句执行完毕后关闭已经打开的文件

    with语句的基本语法格式:

    exprssion:用于指定一个表达式,这里可以是打开文件的open()函数

    target:用于指定一个变量,并且将expression的结果保存到该变量中

    with-body:用于指定with语句体,其中可以是执行with语句后相关的一些操作语句,如果不想执行任何语句,可以直接使用pass语句代替

    with expression as target:
        with-body
    
    # 实例
    with open(r'D:python	est1data.txt') as file:
        print(file.read())
    

    写入文件内容

    python文件对象提供了write()方法,可以向文件中写入内容

    向文件中添加不同格式的内容时,需使用encoding指定编码格式

    # 创建对象追加文件内容
    file = open(r'D:python	est1data.txt', mode='a+')
    # 追加789
    file.write('789')
    # 关闭文件操作
    file.close()
    
    # 使用with追加文字内容,需指定编码格式
    with open(r'D:python	est1data.txt', mode='a+', encoding='utf-8') as file1:
        file1.write('追加写入')
    

    注意点:使用创建对象方法写入时,在写入后要调用close()方法关闭文件,否则写入的内容不会保存到文件中,这是因为当我们子啊写入文件内容时,操作系统不会立刻把数据写入磁盘。而是先缓存起来,只有调用close()方法时,才能成功的把数据写入文件中

    从指定位置读取内容

    python提供了seek()方法,用于指定位置读取文件内容

    file:已经打开的文件对象

    offset:用于指定移动的字符个数,其具体位置与whence参数有关

    whence:用于指定从什么位置开始计算,值为0表示从文件头开始计算,值为1表示从当前位置开始计算,值为2表示从文件尾开始计算,默认为0

    # seek()方法的基本语法格式
    file.seek(offset[,whence])
    

    实例

    file = open(r'D:python	est1data.txt', mode='r', encoding='utf-8')
    # 从位置3开始读取,0为从文件头开始计算
    file.seek(3, 0)
    # 从位置3开始读取,读取2个字符个数
    print(file.read(2))
    file.close()
    

    读取一行与全部行

    readline():读取一行文本

    readlines():读取所有行,以列表中形式存储,每行以字符串形式为列表的一个元素

    # 读取一行
    with open(r'D:python	est1data.txt', encoding='utf-8') as file:
        print(file.readline())
    
    # 读取全部行,效果等同于read()方法,但是返回的是一个字符串的列表
    with open(r'D:python	est1data.txt', encoding='utf-8') as file1:
        print(file1.readlines())
    

    目录操作

    目录也称文件夹,用于分层保存文件。通过目录可以将不同的文件存在不同的目录下,也可以通过目录快速找到想要的文件。在python中,并没有提供直接操作目录的函数或者对象,而是需要通过内置的os和os.path模块实现

    注意点:由于操作系统的差异性,在不同的操作系统中运行,可能会得到不同的结果

    os和os.path模块

    在python中,内置了os模块及子模块os.path用于对目录或文件进行操作。在使用os模块或者os.path模块时,需要先使用import语句将其导入,然后才可以应用它们提供的函数或者变量

    # 导入os模块
    import os
    
    
    # 获取操作系统类型
    print(os.name)
    
    # 获取当前操作系统所使用的路径分隔符
    print(os.sep)
    
    # 获取当前文件路径
    print(os.getcwd())
    

    os模块提供的与目录相关的函数

    函数 说明
    getcwd() 返回当前的工作目录
    listdir(path) 返回指定路径下的文件和目录信息
    mkdir(path[,mode]) 创建目录
    mkdirs(path1/path2……[,mode]) 创建多级目录
    rmdir(path) 删除目录
    removedis(path1/path2……) 删除多级目录
    chdir(path) 把path设置为当前工作路径
    walk(top[,topdown[,onerror]]) 遍历目录树,该方法返回一个元组,包括所有路径名,所有目录列表和文件列表3个元素

    os.path模块提供的与目录相关的函数

    函数 说明
    abspath(path) 用于获取文件或目录的绝对路径
    exists(path) 用于判断目录或者文件是否存在,如果存在则返回True,否则返回False
    join(path,name) 将目录与目录或者文件名拼接起来
    splitext() 分离文件名和扩展名
    basename(path) 从一个目录中提取文件名
    dirname(path) 从一个路径中提取文件路径,不包括文件名
    isdir(path) 用于判断是否为有效路径

    高级文件操作

    函数 说明
    assess(path,accessmode) 获取对文件是否有指定的访问权限(读取/写入/执行权限)assessmode的值是R_OK(读取)、W_OK(写入)、X_OK(执行)或F_OK(存在)。如果有指定的权限,则返回1,否则返回0
    chmod(path,mode) 修改path指定文件的访问权限
    remove(path) 删除path指定的文件路径
    rename(src,dst) 将文件或目录src重命名为dst
    stat(path) 返回path指定文件的信息
    startfile(path[,operation]) 使用关联的应用程序打开path指定的文件

    获取文件的基本信息

    import os
    
    # 获取文件的基本信息,使用file接收
    file = os.stat(r'D:python	est1data.txt')
    # 输出文件的基本信息
    print(file)
    # 获取文件的文件大小
    print(file.st_size)
    

    stat()函数返回的对象的常用属性

    属性 说明 属性 说明
    st_mode 保护模式 st_dev 设备名
    st_ino 索引号 st_uid 用户ID
    st_nlink 硬链接号(被连接数目) st_gid 组ID
    st_size 文件大小,单位为字节 st_atime 最后一次访问时间
    st_mtime 最后一次修改时间 st_ctime 最后一次状态变化的时间(系统不同返回结果也不同,例如,在windows操作系统名下返回的是文件的创建时间)
  • 相关阅读:
    python简介
    Error:unknown filesystem
    Ubuntu 12.04 相关问题
    C/C++版数据结构之链表<一>
    C/C++版数据结构之链表<二>
    C/C++版数据结构之树<二>
    C/C++版数据结构之树<一>
    C/C++版数据结构之链表<三>
    C/C++版数据结构之排序算法
    php 操作文件简单例子
  • 原文地址:https://www.cnblogs.com/zhouxiongjie/p/13182182.html
Copyright © 2011-2022 走看看