• Python基础十七:IO编程一:读写文件


    Python基础十七:IO编程一:读写文件


    Python基础系列内容为学习廖雪峰老师Python3教程的记录,廖雪峰老师官网地址:廖雪峰Python3教程


    Author:yooongchun

    Email:yooongchun@foxmail.com


    • I/O :IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。

    • 文件读写

      • 读文件:Python提供open 函数来进行文件的打开操作,然后读取数据:
      file_path="decrator.py" # 文件地址
      f=open(file_path,"r",encoding="UTF-8",errors="ignore") #以只读("r")模式打开文件
      contents=f.read() # 读取所有文件内容
      print("contents:
      %s"%contents)
      f.close()# 关闭文件

      注意:最后别忘了关闭文件,不然程序只要在运行就会一直占用系统资源,别的程序请求文件权限就会失败。另外,我们通过encoding="UTF-8"来指定读取文件的编码模式,使用errors="ignore"来指明读取文件遇到错误时忽略错误。

      • 文件读写经常会遇到问题:比如文件占用不能写入,比如找不到文件等,这时就需要用到之前我们介绍的try...except...finally... 语句来执行
      file_path="decrator.py" # 文件地址
      try:
          f=open(file_path,"r",encoding="UTF-8",errors="ignore") #以只读("r")模式打开文件
          contents=f.read() # 读取所有文件内容
          print("contents:
      %s"%contents)
      except IOError as e:
          print("打开文件出错!")
      finally:
          f.close()# 最后关闭文件

      上面的写法有些复杂,Python提供了一种简单的语法来处理文件关闭问题:with open(xx,...) as xx

      file_path="decrator.py" # 文件地址
      with open(file_path,"r",encoding="UTF-8",errors="ignore") as f:
          contents=f.read() # 读取所有文件内容
          print("contents:
      %s"%contents)

      上面的程序打开文件后不论执行完与否都会关闭文件。

      • 写文件:写文件同样需要使用open函数打开,然后使用w模式即可:
      import os
      file_path="test.txt" # 文件地址
      with open(file_path,"w",encoding="UTF-8",errors="ignore") as f:
          print("write to file...")
          f.write("Hello,this is a test for writing file to disk...") #   写出文件内容
      if os.path.isfile("test.txt"):
          # 读取文件并打印内容
          print("read file contents...")
          with open(file_path,'r',encoding='UTF-8',errors='ignore') as f:
              print(f.read())
          print("remove file...")
          os.remove("test.txt")# 删除生成的文件
      • 需要提醒的一点是,读文件时使用read读入虽然方便,但是当文件很大时(比如10GB),会导致内存不够,导致程序崩溃,这时,我们最好根据需要进行读入操作:read(size) ,给read 函数指定一个size 读取时会根据其来决定每次读入的字符数,或者也可以使用readline来每次读入一行或者readlines读入所有行,然后每行作为一个list中的一个元素
    • StringIOBytesIO :有的时候,数据读写不一定是文件,也可以在内存中进行读写,StringIO 即是在内存中进行字符串的读写,而要进行二进制数据的读写就需要BytesIO

      from io import StringIO#导入包
      f=StringIO()#创建一个StringIO对象
      f.write("Hello World!")#写数据
      print(f.getvalue())#使用getvalue()方法获得值并打印

      BytesIO使用方法跟StringIO 是一样的:

      from io import BytesIO
      f = BytesIO()
      f.write('中文'.encode('utf-8'))
      print(f.getvalue())
  • 相关阅读:
    reids 数据库学习
    java 8 学习二(Lambda表达式)
    java 8 学习一(概述)
    update Select 从查询的结果中更新表
    从一段文字中提取出uri信息
    Hadoop3.0磁盘均衡器
    MapReduce 程序mysql JDBC驱动类找不到原因及学习hadoop写入数据到Mysql数据库的方法
    yarn计算一个节点容量及其配置项
    YARN的capacity调度器主要配置分析
    1084 Broken Keyboard (20 分)字符串
  • 原文地址:https://www.cnblogs.com/yczha/p/13160227.html
Copyright © 2020-2023  润新知