python文件的使用

文件 File

  文件是用于数据存储的单位
  文件通常用来长期存储数据
  文件中的数据是以字节为单位进行顺序存储的

文件的操作流程
  1. 打开文件
  2. 读/写文件
  3. 关闭文件
  注: 任何操作系统,一个应用程序同时打开文件的数量有最大数限制

文件的打开函数:
  open(file, mode='rt') 用于打开一个文件,返回此文件流对象
  如果文件打开失败,则会触发OSError类型的错误
文件的关闭方法:
  F.close() 关闭文件,释放系统资源

  # 1 打开文件
  myfile = open('myfile.txt', 'rt')
  # myfile = open('./myfile.txt')
  # myfile = open('/home/tarena/waid1812/PBase/day15/code/myfile.txt')
  print("文件打开成功")
  # 2.读写文件
  s = myfile.read()
  print("myfile文件里的内容是:", s)

  # 3.关闭文件
  myfile.close()
View Code

文件的读方法:
  F.read([n])
  F.readline()
  F.readlines()

文件的写方法:
  F.write(s) # 写入字符串或字节串(二进制模式)到文件中
  F.writelines(lst) # 写入字符串或字节串列表到文件中

读文件模式:
  'r' 只读
写文件模式:
  'w' 只写,可创建文件
  'x' 只写,当文件已存在时不创建文件,文件不存在于才创建文件
  'a' 追加写

  # 此示例示意用程序来创建 mynote.txt的文件,再向其中写入
  # 一些文字内容

  myfile = open('mynote.txt', 'w')
  myfile.write("日记
")
  myfile.write('2019年3月24日 晴')
  myfile.close()
View Code

文件的迭代读取
  文本文件流对象是一个可迭代对象,可以用for语句来遍历每一行数据迭代过程将以' ' 作用为隔符依次获取
  示例:
    fr = open('myfile.txt')
    for line in fr:
      print(line)

标准输入输出文件
  sys.stdin # 标准输入文件
  sys.stdout # 标准输出文件
  sys.stderr # 标准错误输出文件(默认是屏幕终端)
  模块名: sys
  注: 标准 输出输出文件不需要打开了关闭就可以使用

  # 此示例示意直接操作sys.stdout 来向屏幕终端打印信息
  import sys
  sys.stdout.write("这是标准输出打印的第一行
")
  sys.stdout.write('这是标准输出打印出的第二行
')

  # sys.stdout.close() # 不要关闭标准 输入输出文件

  print("这是print打印出来的第三行")
View Code

二进制文件操作
  二进制文件模式字符: 'b'
  默认文件中存储和都是以字节(byte)为单位的数据,通常有人为的格式对二进制文件的读了需要用字节串(bytes)进行操作与文本文件操作不同,二进制文件读写过程中不会进行自动的编解码转换

  # 此示例示意用二进制方式写文件
  # 此文件包含256个字节,第一个字节的值为0, 第二个字节的值为1
  # ... 最后一个字节的值是:255

  # 打开文件
  fw = open('bin256.txt', 'wb') # 'w'-->写, 'b'--> binary

  b = bytes(range(256))
  print(b) # b'x00x01.....xFF'
  count = fw.write(b) # 写入字节串,返回写入的字节个数
  print("成功写入了", count, '个字节')

  fw.close()
View Code

二进制文件的随机访问
  F.tell() 返回当前文件的读写位置(从文件头以字节为单位)
  F.seek() 设置文件读写位置
  格式:
    F.seek(偏移量, whence=相对位置)
  偏移量:
    大于0的数代表向文件末尾方向移动
    小于0代表向文件头方向移动
  相对位置
    0 代表从文件头开始偏移
    1 代表从当前读写位置开始偏移
    2 代表从文件尾开始偏移

  fr = open('20char.txt', 'rb')

  print("刚开始时读写位置在:", fr.tell()) # 0
  b = fr.read(2)
  print(b)
  print("读完两个字节后,当前的读写位置在", fr.tell()) # 2

  fr.close()
View Code
  #20char.txt = ABCDEabcde0123456789

  # 此示例示意设置文件的读写位置,实现文件的随机读取
  fr = open('20char.txt', 'rb')
  b = fr.read(2)
  print("当前位置在:", fr.tell()) # 2
  # 1. 从文件头向后移动5个位置
  # fr.seek(5, 0)
  # 2. 从当前位置向后移动3个字节
  # fr.seek(3, 1)
  # 3. 从文件末尾向前移动15个字节
  fr.seek(-15, 2)

  print("移动后,当前读写位置为:", fr.tell())
  b = fr.read(5) # b=b'abcde'
  print('b=', b)
  fr.close()
View Code

文件小结:
  打开模式:
    't' 文本文件打开(默认)(自动进行编解码)
    'b' 二进制文件打开
  操作方式:
    读:
      F.read(n)
      F.readline()
      F.readlines()
    写:
      F.write(字节串或字符串)
      F.write(字节串或字符串列表)

汉字编码
  国标系列
    GB18030(二字节或四字节编码, 27533个汉字)
      GBK(二字节编码, 21003个汉字)
        GB2312(二字节编码,6763个汉字+682个字符)
    (windows常用)
  国际标准
    UNICODE32(四字节编码) <----> UTF-8
      UNICODE16(二字节编码)
    (Linux/IOS/ Android 常用)

  UTF-8 (8bit-UNICODE Transformation Format)
    0x0000 ~ 0x007F 1字节表示
    0x0080 ~ 0x07FF 2字节表示
    0x00800~ 0xFFFF 3字节表示(中文在此区)

python 编码(encode) 字符串
  'gb2312'
  'gbk'
  'GB18030'
  'utf-8'
  'ascii'
  示例:
    s = "ABC中文"
    b1 = s.encode('gbk') # b1 为7字节
    b2 = s.encode('utf-8') # b2 为 9字节

  编码注释:
    在源文件的第一行或第二行写入如下内容为编码注释
      # -*- coding:gbk -*-
      或
      # -*- coding:utf-8 -*-
    作用:
      告诉解释执行器,当前文件的编码类型是什么

原文地址:https://www.cnblogs.com/zhaoyang1997/p/10591072.html