操作模式

r

  1. """
  2. 以只读方式打开文件(默认),文件的指针会放在文件的开头
  3. 若文件不存在,会报错
  4. """
  5. f = open("a.txt", "r") # 在同级目录下打开文件
  6. content = f.read()
  7. print(content)

w

  1. """
  2. 以只写方式打开文件,文件的指针也在文件开头,进行覆盖写入(先清空后写入)
  3. 若文件不存在,会创建一个新的文件
  4. """
  5. f = open("a.txt", "w")
  6. f.write("66666")

a

  1. # 与 w唯一不同的是,文件的指针会放在文件的末尾

增加b操作

  1. """
  2. 以二进制的方式进行文件操作 rb, wb, ab
  3. 将一张图片的一半内容写入到另外一个图片中
  4. 第二章图片可以打开浏览,是只有第一张一半的内容,还是图片质量下降呢?大家可以试一下
  5. """
  6. fromFile = open("pic.jpg", "rb")
  7. content = fromFile.read()
  8. fromFile.close()
  9. writeLen = len(conten) // 2
  10. toFile = open("pic2.jpg", "wb")
  11. toFile.write(content[0:writeLen])
  12. toFile.close()

文件指针的定位

  1. """
  2. seek(offset, whence=0)
  3. whence表示指定文件指针所在的位置
  4. whence=0:文件开始处,offset >= 0
  5. whence=1:当前的位置,offset is free
  6. whence=2:文件结尾处,offset <= 0
  7. 但是对于不带 b的文件操作,whence只能为 0
  8. """
  9. f = open("a.txt", "r") # 当前文件内容:12345678
  10. print(f.tell()) # 获得当前文件指针的位置 0
  11. f.seek(2) # 向后移动两个单位
  12. print(f.tell()) # 2
  13. print(f.read()) # 345678
  14. print(f.tell()) # 8

文件读操作

f.read(length):

  1. # length默认是文件所有内容的长度,文件指针自动向后移动
  2. f = open("a.txt", "r") # 文件内容:12345
  3. content = f.read(2)
  4. print(content) # 12
  5. print(f.tell()) # 4

readline(limit):

  1. # 读取一行数据,会读入文件中的换行符
  2. # limit:限制的最大字符数
  3. f = open("a.txt", "r") # 文件内容:123\n456\n
  4. print(f.readline(), end='') # 123
  5. print(f.readline(), end='') # 456

readlines():

  1. # 按照换行符对文件内容进行处理,处理好的每一行组成一个列表返回
  2. f = open("a.txt", "r") # 文件内容:123\n456\n
  3. printf(f.readlines()) # ['123\n', '456\n']

遍历

  1. # 直接遍历文件
  2. f = open("a.txt", "r")
  3. for i in f:
  4. print(i, end='')
  5. # 遍历 readlines()的结果
  6. lines = f.readlines()
  7. for line in f:
  8. print(line, end='')

文件关闭

  • 释放系统资源
  • 将内存缓冲区中的内容同步到磁盘中
  • 文件写入内容时,并不是立即写入到磁盘文件,而是在对应的内存缓冲区做修改,当文件关闭时,再一次性将这些修改拷贝到磁盘。
  • f.flush() 可以强制刷新内容到磁盘。

    其他操作

  • 依赖于os模块

    重命名

    1. import os
    2. os.rename("b.txt", "a.txt") # 更改文件名称
    3. os.rename("dir1", "dir2") # 更改目录名称

    删除

    1. import os
    2. os.remove("b.txt") # 删除 b.txt
    3. os.rmdir("dir1/dir2") # 删除了 dir2目录,若目录不为空,则无法删除
    4. os.rmdirs("dir1/dir2") # 递归删除,若dir1为空,也删除

    创建目录

    1. import os
    2. # mkdir(path, mode) # mode=0o777 //权限设定方式参照 Linux
    3. os.mkdir("dir1") # 一次只能创建一个目录,不能递归创建多个目录

    路径相关操作

    1. # os.getcwd() 获得当前的目录
    2. # os.chdir() 改变当前所在路径
    3. # os.listdir() 获得目录下文件列表

    文件相关案例

    文件复制

    ```python import os

    只读模式,打开要复制的文件

    追加模式,打开副本文件

    scr_file = open(“d.txt”, “r”, encoding=”utf-8”) obj_file = open(“d_copy.txt”, “w”, encoding=”utf-8”)

从源文件中读取内容,写入到目标文件

while True: content = scr_file.read(1024) # 如果文件过大,分块写入 if not content: break else: obj_file.write(content)

关闭源文件和目标文件

scr_file.close() obj_file.close()

  1. <a name="4ac1bd4a"></a>
  2. ## 文件分类,生成文件清单
  3. ```python
  4. import os
  5. file_list = os.listdir(".")
  6. res = {}
  7. for file in file_list:
  8. if "." not in file: # 排除掉目录
  9. continue
  10. appendix = file.split(".")[-1] # 获得扩展名
  11. if appendix not in res:
  12. res[appendix] = []
  13. res[appendix].append(file)
  14. print(res)