zoukankan      html  css  js  c++  java
  • Python I/O及FIle方法

    一、文件操作

    文件的编码格式:
    ASCII与UNICODE:
    计算机有256个ASCII字符(8个0/1的排列组合方式一共有256种, 2**8)
    UTF-8是UNICODE的一种编码格式,计算机中使用1~6个字节来表示一个UTF-9字符,涵盖了地球上几乎所有地区的文字,汉字使用3个字节表示

    open(file, mode = 'r', buffering = -1 , encoding=None, errors = None, newline = None, closefd = True,opener = None)

    八个参数意义:

    • file——可表示文件名,也可是相对当前目录的路径,或者是绝对路径;
    • mode——设置文件的打开模式:r——只读(默认),w——写入(不存在则创建,存在则覆盖),x——文件存在抛异常,不存在则创建并写入,a——追加(若已存在则追加到文件末尾),+——更新模式。一般文本文件使用“r+,w+,x+,a+”,二进制文件采用“rb+,wb+,xb+,ab+”
    • buffering——缓冲策略,默认值-1,自动设置缓冲区4096或8192字节,当值为0时关闭缓冲区,数据将直接被写入文件。使用缓冲区是为了提高效率减少IO操作,当文件关闭或刷新缓冲区时,数据才真正被写入。
    • encoding和errors——打开文件编码、发生错误时处理方案
    • newline——设置换行模式
    • closefd和opener——调用close方法关闭文件,opener是打开文件时执行的一些加工操作,返回一个文件描述符。

    一般只使用前两个参数。

    文件内容读取:

    filename = 'E:/a.txt'
    try:
        f = open(filename)
    except OSError:
        print('打开文件失败')
    else:
        try:
            content = f.read()
            print(content)
        except OSError:
            print('文件读取失败')
    finally:
        f.close()
    View Code

    注意:

      在编写代码时,最好是open之后立即编写文件关闭方法,即close(),以免忘记关闭文件,造成系统资源损耗,影响后续对其他文件的访问。

      在读取文件时,read方法将一次性读取文件所有内容,读取文件的指针将会从开头一直移动到末尾。

      在第一次read读取之后,再次调用read()方法,将不能够获取到内容,因为此时文件指针移动到了文件末尾。

    简单代码:

    with open('E:/a.txt', 'r') as f:
        content = f.read()
        print(content)
    View Code

    读取文件并复制(w——写入(不存在则创建,存在则覆盖)):

    filename = 'E:/a.txt'
    with open(filename, 'r', encoding='utf-8') as f:
        lines = f.readlines()
        print(lines)
        copy_f_name = 'E:/copy_a.txt'
        with open(copy_f_name, 'w', encoding='utf-8') as copy_f:
            copy_f.writelines(lines)
            print('{}成功复制到{}'.format(filename, copy_f_name))
    
    
    结果:
    ['hellohellohellohello']
    E:/a.txt成功复制到E:/copy_a.txt
    View Code

    二进制文件读写:

    • read(size = -1):size限制读取的行数,size = -1时读取全部字节
    • readline(size = -1)读取并返回一行,参数同上
    • readlines(hint = -1)读取数据到一个列表中,每一个行数据是列表的一个元素,hint限制读取的行数,值为-1是不限制
    • write(b):写入b字节,并返回字节数
    • writelines(lines):向文件中写入一个列表,不添加分隔符,每一行末尾提供分隔符
    • flush(),刷新缓冲区,将缓冲区数据写入文件中。

     二进制文件复制(wb——二进制文件写入(不存在则创建,存在则覆盖)):

    filename = 'E:/头像.jpg'
    with open(filename,'rb') as f:
        b = f.read()
        copy_f_name = 'E:/头像_Copy.jpg'
        with open(copy_f_name,'wb') as copy_f:
            copy_f.write(b)
            print('二进制文件复制成功!')
    View Code

     二、OS模块——系统目录与文件的管理:

    • os.rename(src, dst):修改源文件src成目标文件dst,可为相对路径或绝对路径;
    • os.remove(path):删除path目录下指定文件,若为路径,则OSError;
    • os.mkdir(path):创建path目录,若已存在,则FileExistsError;
    • os.rmdir(path):删除path目录:目录非空,则OSError;
    • os.walk(top):遍历top目录树,自上而下,返回三元组(目录路径,目录列表,文件名列表);
    • os.listdir(dir):列出指定目录中的文件和子目录;
    • os.curdir:获得当前目录;
    • os.pardir:获得当前父目录。
    import os
    
    f_name = 'E:/a.txt'
    copy_f_name = 'E:/a_copy.txt'
    with open(f_name, 'r') as f:
        b = f.read()
        with open(copy_f_name, 'w') as copy_f:
            copy_f.write(b)
    # 判断是否存在,否则文件重命名
    try:
        os.rename(copy_f_name, 'E:/b.txt')
    except OSError:
        os.remove('E:/b.txt')
    # 输出当前目录及父目录
    print(os.listdir(os.curdir))
    print(os.listdir(os.pardir))
    # 判断路径是否存在,否则删除路径
    try:
        os.mkdir('E:/filesdir')
    except OSError:
        os.rmdir('E:/filesdir')
    for i in os.walk('E:/桌面'):
        print(i)
    View Code

    结果:

    三、os.path模块

    • os.path.abspath(path)——返回绝对路径
    • os.path.basename(path)——返回基础名(如果path指向文件,则返回文件名,指向目录,则返回最后目录名)
    • os.path.dirname(path)——返回path中的目录
    • os.path.exists(path)——path是否存在
    • os.path.isdir(path)——path是文件,返回True
    • os.path.getatime(path)——path是目录,返回True
    • os.path.getmtime(path)——返回最后访问时间(自1970-1-1 00:00:00来的总秒数)
    • os.path.getctime(path)——返回最后修改时间(自1970-1-1 00:00:00来的总秒数)
    • os.path.getsize(path)——返回文件大小,单位字节。

    示例:

    import os.path
    from datetime import datetime
    
    f_name = '抢火车票.py'
    all_name = r'C:UsersJeryPycharmProjectsCollectImages抢火车票.py'
    # 基础名部分
    basename = os.path.basename(all_name)
    print(basename)
    # 目录部分
    dirname = os.path.dirname(all_name)
    print(all_name)
    # 绝对路径
    print(os.path.abspath(f_name))
    # 文件大小
    print(os.path.getsize(f_name))
    # 最近访问时间
    atime = datetime.fromtimestamp(os.path.getatime(f_name))
    print(atime)
    # 最近修改时间
    mtime = datetime.fromtimestamp(os.path.getmtime(f_name))
    print(mtime)
    # 创建时间
    ctime = datetime.fromtimestamp(os.path.getctime(f_name))
    print(ctime)
    
    print(os.path.isdir(dirname))
    print(os.path.isfile(f_name))
    print(os.path.exists(f_name))
    
    
    
    
    结果:
    抢火车票.py
    C:UsersJeryPycharmProjectsCollectImages抢火车票.py
    C:UsersJeryPycharmProjectsCollectImages抢火车票.py
    5673
    2019-03-27 11:19:39.251669
    2019-03-27 11:19:39.251669
    2019-03-15 19:48:48.315313
    True
    True
    True
    
    Process finished with exit code 0
    View Code
  • 相关阅读:
    SpringMVC @RequestBody请求参数在postman中的请求
    git rm -r --cached 去掉已经托管在git上的文件
    shiro源码解析--------欢迎指出错误地方,还有一起讨论一下ShiroFilterFactoryBean配置过滤URL规则
    如何用Tomcat部署前端静态文件
    用HTML 格式导出Excel
    csv和excel的区别
    使用HttpOnly提升Cookie安全性
    asp.net core 如何在Controller获取配置文件的值
    Find Out What Your Entity Framework Query Is Really Doing
    鸡汤
  • 原文地址:https://www.cnblogs.com/Jery-9527/p/10607219.html
Copyright © 2011-2022 走看看