zoukankan      html  css  js  c++  java
  • python学习笔记(八)——文件操作

    在 windows 系统下,我们通过 路径+文件名+扩展名的方式唯一标识一个文件,而在 Linux 系统下通过 路径+文件名唯一标识一个文件。

    文件分类:文件主要可以分为文本文件二进制文件,常见的如记事本中的 xx.txt 的文件就是文本文件,而图片,音乐等就是以二进制方式保存的二进制文件。

    python 文件操作:
    def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

    • file :文件标识,通过 路径+文件名(扩展名)的方式指定
    • mode : 模式,读、写、追加、新建等。
    • encoding : 编码方式。

    下面是 builtins.py 中对 open 的说明:

    Open file and return a stream.  Raise OSError upon failure.
    打开文件并返回流。 失败时引发OSError。
        
    ...
    
    可用的模式有:
        
        'r'       open for reading (default)						# 只读
        'w'       open for writing, truncating the file first		# 写入
        'x'       create a new file and open it for writing			# 创建一个新文件,并写入
        'a'       open for writing, appending to the end of the file if it exists	# 追加
        'b'       binary mode					# 二进制模式
        't'       text mode (default)			# 文本模式
        '+'       open a disk file for updating (reading and writing)		# 打开磁盘文件进行更新(读写)
        'U'       universal newline mode (deprecated)						# 通用换行模式
    
    读取文件测试

    在磁盘上准备一个待测试文本文件。
    在这里插入图片描述
    使用 open 方法读取文件。

    f=open(r"F:python test.txt","r",)
    print(f.read())
    

    pycharm报错:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position 80: illegal multibyte sequence
    看来open()默认的读取编码格式是“gbk”,报错信息中显示有无法解读的字节序列,那么我们把读取的编码格式指定为 “UTF-8” 就可以了。

    f=open(r"F:python test.txt","r",encoding='UTF-8')
    print(f.read())
    
    输出:
    If you put your mind to it, you can accomplish anything.
    有志者,事竟成。
    

    需要注意的是,用 f.read() 会将文本中的内容全部读取进内存中,如果文件内容很多将会占用大量的内存。python 中为文件对象 file 还提供了以下的几种读取方法。

    • file.read([size]):size 未指定则返回整个文件,如果文件大小 >2 倍内存则有问题,f.read()读到文件尾时返回""(空字串)。
    • file.readline():返回一行。
    • file.readlines([size]) :返回包含size行的列表, size 未指定则返回全部行。
    f=open(r"F:python test.txt","r",encoding='UTF-8')
    print(f.read(6))
    输出:
    If you
    
    f=open(r"F:python test.txt","r",encoding='UTF-8')
    print(f.readline())
    输出:
    If you put your mind to it, you can accomplish anything.
    
    f=open(r"F:python test.txt","r",encoding='UTF-8')
    print(f.readlines())
    输出:
    ['If you put your mind to it, you can accomplish anything.
    ', '有志者,事竟成。']
    

    需要注意的是,文件在读取时读取的位置会被文件指针保存,方便下一次继续读取。可以通过 f.seek(偏移量,[起始位置]) 用来移动文件指针。

    关闭文件:f.close()
    在一个文件使用完之后一定要记得关闭文件。每个文件都会占用一个文件句柄(LInux下为文件描述符),如果不进行资源的释放会造成极大的浪费。另外文件打开后如果对文件进行了修改不会马上写回到文件中,如果没有手动关闭文件很可能修改过的数据就不会同步到文件中。

    写入文件测试

    覆盖写入。

    f=open(r"F:python test.txt","w",encoding='UTF-8')
    f.write("写入测试")
    f.close()
    f=open(r"F:python test.txt","r",encoding='UTF-8')
    print(f.read())
    f.close()
    
    输出:
    写入测试
    

    注意:在“w”模式下,如果文件不存在则会创建一个新文件,再进行写入操作。

    追加写入。

    f=open(r"F:python test.txt","a",encoding='UTF-8')
    f.write("追加测试")
    f.close()
    f=open(r"F:python test.txt","r",encoding='UTF-8')
    print(f.read())
    f.close()
    
    输出:
    写入测试追加测试
    

    同 “w” 模式一样,如果文件不存在,会创建一个新的文件。

    读写文件测试
    f=open(r"F:python test.txt","w+",encoding='UTF-8')
    f.write("读写测试")
    f.seek(0)
    print(f.read())
    f.close()
    
    输出:
    读写测试
    

    同理,也可以使用 “a+” 追加读写的方式。

    自动关闭文件

    在某些程序中会对大量的文件进行打开和关闭的操作,我们手动的去关闭会很麻烦。因此,python 中提供了一种自动关闭文件的方法。

    with open(r"F:file","r") as f:
        f.readline()
    

    在 with 后加上文件操作,在执行完相应的语句后会自动将文件关闭。

  • 相关阅读:
    sqlalchemy的orm的高级用法,分组,排序,聚合等方法
    flask的SQLAlchemy,连接数据库的增删改查操作
    wtforms的form表单的高级用法
    初始wtforms表单,以及简单使用
    命令启动flask以及自定义命令
    MySQL5.5安装教程
    Java设计模式-策略模式实际应用场景
    Java设计模式-策略模式详解
    Oracle数据库之FORALL与BULK COLLECT语句
    代理模式详解(静态代理和动态代理的区别以及联系)
  • 原文地址:https://www.cnblogs.com/TaoR320/p/12680102.html
Copyright © 2011-2022 走看看