day08 文件操作

今日主要内容
1. 文件操作 open() 文件句柄
  open()打开一个文件, 获取的是文件句柄
  read() : 一次性全部读取  返回字符串  (正常情况下不用)   read(n) 读取n个字符

  readline():  读取一行数据  返回字符串  常搭配 strip()  去除"空白"内容 读取文件
  readlines() : 一次性全部读取  返回列表  (正常情况下不用)
  write() :  写入

for line in f: 遍历文件中的内容

  路径的问题:
  1. 绝对路径  :  从磁盘根目录寻找   多用于运维  当文件路径固定的时候
  2. 相对路径  :   从当前程序运行的文件夹内寻找   用得多   ../表示上一层目录

  注意:  打开路径文件路径时 前面加 r  消除目录有 (转义字符)   的影响

2. 文件操作的相关模式Mode

  适用于文本文件:
  r: 只读
  w: 只写  可以创建文件

掌握文本文件复制

f1 = open(r'c:/日记本.txt', mode='r', encoding='utf-8')
f2 = open(r'e:/日记本.txt', mode='w', encoding='utf-8')
for line in f1:
    f2.write(line)
f1.close()
f2.close()
View Code

  a: 追加
  r+: 读写模式   坑1:  必须先读取,再写入   坑2:  不论你读取多少内容。再次写入的时候都是在末尾

# 正常的
# f = open("person", mode="r+", encoding="utf-8")
# content = f.read()
# f.write("黄蓉")   # 在末尾写入
# print(content)

# 错误的示范
# f = open("person", mode="r+", encoding="utf-8")
# f.write("杨千桦") # 默认如果直接写入的话。 在开头写入。 覆盖开头的内容
# content = f.read()
# print(content)
View Code

  w+:  写读模式   坑:写入东西之后, 光标在末尾 ,读取不到内容

  a+:  追加写读模式   坑:  不论光标在何处 写入的时候都是在末尾

  下面的适用于非文本文件  b - bytes 读取和写入的是字节 , 用来操作非文本文件(图片, 音频, 视频)
  rb  wb  ab   不需要指定打开文件的编码

掌握复制照片

# 把胡一菲从c盘复制到d盘, 单纯的从bytes角度来复制的。 适用于所有文件
f1 = open(r"c:胡一菲.jpg", mode="rb")
f2 = open(r"d:胡二非.jpg", mode="wb")

for line in f1: # 分批量的读取内容
    f2.write(line) # open()出来的结果可以使用read或者write. 根据mode来看

f1.close()
f2.close()
View Code

  r+b  w+b   a+b

3. 相关操作
  1. seek()移动光标(重点)   以字节为单移动
    seek(0) 开头
    seek(0,2) 移动到末尾

# seek(参数1, 参数2)
# 参数1表示的是偏移量,移动多少个单位
# 参数2表示从什么位置进行偏移
# 0: 开头
# 1: 当前位置
# 2: 末尾

  2. tell() 获取光标所在的位置
  3. truncate() 截断文件 默认从开头截取到光标位置 

4. 文件修改
  with open(xxx) as 句柄,
  open(xxxxx)as xxx:
  不用手动关闭文件句柄

  文件修改的步骤
  1. 从源文件中读取数据。
  2. 写入到副本文件中
  3. 删除源文件
  4. 把副本重命名成源文件
  import os
  os.remove()
  os.rename()

原文地址:https://www.cnblogs.com/Knight-huang/p/9857405.html