zoukankan      html  css  js  c++  java
  • Python3之文件

    一、pathlib模块

    该模块提供提供表示文件系统路径的类

    该模块包括的类如图:

    pathlib.PurePath(pathfile)
    返回表示纯路径的类
    只对pathfile执行操作,不实际访问pathfile表示的文件,也不管pathfile表示的文件是否存在
    如果未提供pathfile,默认当前路径
    
    pathlib.PurePosixPath(pathfile)
    PurePath 的子类,路径风格为UNIX
    
    pathlib.PureWindowsPath(pathfile)
    PurePath 的子类,路径风格为Windows
    
    Pathlib.Path(pathfile)
    PurePath 的子类,返回表示具体路径的类
    可用于判断pathfile表示的文件是否存在,是否是文件或目录等
    
    pathlib.PosixPath(pathfile)
    Path和 PurePosixPath的子类,路径风格为UNIX
    
    pathlib.WindowsPath(pathfile)
    Path 和PureWindowsPath的子类,路径风格为Windows

    二、Path类

    pathlib.Path.cwd()
    返回当前目录路径的对象
    
    pathlib.Path.home()
    返回当前用户的家目录对象
    
    pathlib.Path.stat()
    返回包含有关此路径的信息的 os.stat_result 对象
    如:
    p = pathlib.Path('/root')
    p.stat()
    
    pathlib.Path.chmod(mode)
    改变文件的模式和权限,和 os.chmod() 一样
    如:
    pathlib.Path('/root/1.txt').chmod(777)
    
    pathlib.Path.exists()
    路径真实存在返回 True ,否则返回 False
    如:
    p = pathlib.Path('/root/1.txt')
    p.exists()
    
    pathlib.Path.glob(pattern)
    当路径指向目录时,返回该路径下满足 pattern 的所有子目录和文件的对象,可用for循环遍历
    如:
    p = pathlib.Path('/root')
    for i in p.glob('*.txt'):
     print(i)
    
    
    pathlib.Path.group()
    返回该文件所属的用户组,如果未找到用户组的gid,引发 KeyError 异常
    如:
    p = pathlib.Path('/root/1.txt')
    p.group()
    
    pathlib.Path.is_dir()
    路径是目录(或者目录的符号链接)返回 True,否则返回 False
    如:
    p = pathlib.Path('/root')
    p.is_dir()
    
    pathlib.Path.is_file()
    路径是文件(或这文件的符号链接)返回 True,否则返回 False
    如:
    pathlib.Path('/root/1.txt').is_file()
    
    pathlib.Path.is_mount()
    路径是挂载点返回True,否则返回False
    
    pathlib.Path.is_symlink()
    路径是符号链接返回 True,否则返回 False
    
    pathlib.Path.is_socket()
    路径指向Unix套接字(或指向Unix套接字的符号链接)返回 True,否则返回 False
    
    pathlib.Path.iterdir()
    当路径指向目录时,返回该路径下所有子目录和文件,可用for循环遍历
    p = pathlib.Path('/root')
    for i in p.iterdir():
     print(i)
     
    pathlib.Path.mkdir(mode=0o777, parents=False, exist_ok=False)
    创建目录,权限为mode
    paretns: 默认False,父目录不存在引发 FileNotFoundError 异常
    exist_ok: 默认False,目录已存在引发 FileNotFoundError 异常
    
    pathlib.Path.open(mode ='r', buffering=-1, encoding=None, errors=None, newline=None)
    和内置函数 open() 类似,以mode权限打开文件
    
    pathlib.Path.rename(dst)
    目录或文件重命名,返回指向目标的新Path实例
    
    pathlib.Path.rmdir()
    删除目录,目录必须为空
    
    pathlib.Path.touch(mode=0o666, exist_ok=True)
    创建文件,权限为mode
    exist_ok: True表示文件已存在,并且其修改时间已更新为当前时间,则成功,否则引发 FileNotFoundError 异常

    三、文件读写

    一) 文件打开

    open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
    打开文件并返回文件对象,文件无法打开引发 OSError 异常
    mode: 可选参数,打开文件的模式,默认'r'
    buffering: 可选参数,设置缓冲策略的整数,默认-1
    encoding: 可选参数,解码或编码文件的编码,仅在文本模式下使用,默认编码取决于平台
    errors: 可选参数,如何处理编码和解码错误
    newline: 可选参数,换行符
    
    file.close()
    关闭文件
    
    file.mode
    返回打开文件的访问模式
    
    file.name
    返回打开文件的文件名
    
    file.closed
    文件关闭返回 True,否则返回 False

    mode可选的参数

    mode

    意义

    文本模式(默认)

    x

    写模式,新建文件,如果该文件已存在则失败

    b

    二进制模式

    +

    打开用于更新(读取与写入)

    r

     只读模式(默认)

    r+

    读写模式

    w

    写模式,若文件已存在,清除已有内容,若文件不存在,则新建

    w+

    读写模式,若文件已存在,清除已有内容,若文件不存在,则新建

    a

    追加写入模式,若文件已存在,不会清除文件已有内容,若文件不存在,则新建

    a+

    读写模式,若文件已存在,不会清除文件已有内容,若文件不存在,则新建

    二) 文件读取

    1 按字节或字符读取文件内容

    read(n) 
    每次读取文本n个字节或字符
    没有传入n参数,默认读取文本全部内容
    打开文件时,mode='b'则表示按字节读取文件,否则表示按字符读取文件

    示例

    按字符读取文件内容

    from pathlib import Path
    
    path = Path('/root/1.txt')
    
    try:
        f = open(path,'r')
        while True:
            #按字符读取文本内容,每次读取4个字符
            cha = f.read(4)
            if not cha:
                break
            else:
                print(cha)
    
    
    except FileNotFoundError as E:
        print(E.args)
    except NameError as E:
        print(E.args)
    except Exception as E:
        print(E.args)
    
    #关闭文件,回收占用的资源
    finally:
        f.close()

    按字节读取文件内容

    from pathlib import Path
    
    path = Path('/root/1.txt')
    
    try:
        f = open(path,'rb')
        while True:
            #按字节读取文本内容,每次读取2个字节
            byte = f.read(2)
            if not byte:
                break
            else:
                print(byte)
    
    except FileNotFoundError as E:
        print(E.args)
    except NameError as E:
        print(E.args)
    except Exception as E:
        print(E.args)
    
    finally:
        f.close()

    2 按行读取文本内容

    必须是文本模式,即mode='t',因为二进制模式(mode='b')没有行的概念
    
    readline(n)
    若未传入参数n,则每次读取文本一行(包括换行符'
    ')
    若传入参数n,则每次读取一行的n个字符
    
    readlines()
    读取文本所有行(包括换行符'
    '),返回所有行组成的列表

    示例

    每次读取一行

    from pathlib import Path
    
    path = Path('/root/1.txt')
    
    try:
        f = open(path,'r')
        while True:
            line = f.readline()
            if not line:
                break
            else:
                print(line)
    
    
    except FileNotFoundError as E:
        print(E.args)
    except NameError as E:
        print(E.args)
    except Exception as E:
        print(E.args)
    
    finally:
        f.close()

    读取所有行

    from pathlib import Path
    
    path = Path('/root/1.txt')
    
    with open(path, mode='r') as f:
        lines = f.readlines()
        for line in lines:
            print(line)

    三)  文件写入

    seek(offset, whence)
    把文件的指针移动到指定位置
    offset:指针偏移量
    whence:默认whence=0,表明指针从文件开头计算;whence=1,表明指针从文件当前位置计算,whence=2,表明指针从文件末尾计算
    
    tell() 
    判断文件指针的位置
    
    write(str|bytes)
    文件里写入字符串或字节串
    
    writelines(iterable)
    文件里写入多个字符串或字节串

    示例

    from pathlib import Path
    import os
    
    path=Path('/app/python/scripts/9.txt')
    
    try:
        f = open(path, mode='a+')
        f.write('	《登高》	')
        f.writelines((os.linesep,
    '【作者】杜甫 【朝代】唐'+os.linesep,
    '风急天高猿啸哀,渚清沙白鸟飞回。'+os.linesep,
    '无边落木萧萧下,不尽长江滚滚来。'+os.linesep,
    '万里悲秋常作客,百年多病独登台。'+os.linesep,
    '艰难苦恨繁霜鬓,潦倒新停浊酒杯。'+os.linesep,)) 
    
    except FileNotFoundError as E:
        print(E.args)
    except NameError as E:
        print(E.args)
    except Exception as E:
        print(E.args)
        
    finally:
        f.close()
  • 相关阅读:
    99. 恢复二叉搜索树
    337. 打家劫舍 III(dp+dfs)
    45. 跳跃游戏 II
    贪心
    460. LFU 缓存
    213. 打家劫舍 II(dp)
    MyScript 开发文档
    Android 全面屏体验
    Android Studio 导入自己编译的 framework jar
    cmake常用配置项
  • 原文地址:https://www.cnblogs.com/gudanaimei/p/14400967.html
Copyright © 2011-2022 走看看