ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ### **文件的小结:** 1. 概念:文件是存储在持久存储设备上的数据 2. 作用:长久存储数据的 3. 存储的设备:硬盘,U盘,移动硬盘,光盘 计算机中的文件最终都是以二进制的方式保存到磁盘 <br /> ### **文件的分类:** 1. 文本文件 ①.可以用文本编辑器打开的文件 ②.举例: .txt, .py, .htmL, .java, .C... ③.文本文件最终还是以二进制的方式保存的 2. 二进制文件 ①.不能使用文本编辑器打开,必须使用专用的软件打开的文件 ②. office办公软件的文件,图片 .png, .jpg, .gif, 音频文件, mp3, 视频文件, mp4 <br /> ### **文件操作流程:** 1. 打开文件 2. 操作文件 ①.读文件(把硬盘上文件中的内容读取到内存中) ②.写文件(把内存中数据写入到硬盘上的文件中) 3. 关闭文件 <br /> ### **常用的函数/方法:** ``` 1. open() 作用:打开文件,返回文件的操作对象 注意: ​ windows默认编码格式gbk,打开文件的需要指定编码格式, encoding="utf-8" ​ linux系统和unix系统默认编码格式就是 utf-8 2. read() 作用:读取文件内容 特点:方法一次性读取文件全部内容,下次再读取时,将读不到任何内容 ​ 注意:读取文件内容的数据类型是字符串 3.write() 作用:把內存中数据写入文件 注意: write()方法只能写入字符串,不能写入列表 ​ 注意: write()方法有返回值,返回值是写入字符串的长度 4.close() 作用:关闭文件 注意:不关闭文件会造成系统资源浪费 ``` ``` ''' 1.打开文件: 文件不存在,报错 文件存在,正常打开 注意: windows默认编码格式gbk,打开文件的需要指定编码格式, encoding="utf-8" linux系统和unix系统默认编码格式就是 utf-8 ''' file = open("readme.txt", encoding="utf-8") ''' 2.操作文件 读文件文件对象.read() read()方法一次性读取文件全部内容,下次再读取时,将读不到任何内容 read()方法读取文件内容的数据类型是字符串 ''' text = file.read() print("--->>>%s<<<---" % text) print(type(text)) ''' 3.关闭文件 不关闭文件会造成系统资源浪费 ''' file.close() ``` <br /> ### **文件指针:(了解)** 1. 相当于鼠标的光标,用来标记文件读取的位置 2. 打开文件时,文件指针位于文件的开头 3. 当使用read()读取文件内容后,文件指针会移动到文件末尾,(read()方法读取文件的内容一 次性全部读取) 4. 所以再次使用read()读取文件内容时,将读不到任何内容 <br /> ### **打开文件的方式:** 1. "r" 只读 文件不存在,报错 文件存在,从开头读 2. "w" 只写 文件不存在,新建 文件方在,覆盖 3. "a"追加 文件不存在,新建 文件有在,在文件末尾追加数据 注意: 频繁移动的文件指针,会降低文件的读写效率, 一般情况下,使用只读或只写的方式打开文件 ``` ''' 打开文件的方式 1. "r" 只读 文件不存在,报错 文件存在,从开头读 2. "w" 只写 文件不存在,新建 文件方在,覆盖 3. "a"追加 文件不存在,新建 文件有在,在文件末尾追加数据 ''' # 1. "r" 只读 file = open("new.txt", "r", encoding="utf-8") text = file.read() print(text) file.close() # 2. "w" 只写 file = open("info.txt", "w", encoding="utf-8") text = file.write("新年快乐!!") print(text) file.close() # 3. "a"追加 file = open("ml.py", "a", encoding="utf-8") text = file.write("小米新机 真不错!") print(text) file.close() ``` ### **readline()方法小结:** 1. readline()方法一次只是读取一行内容 2. 读完后,把文件指针移动到下一行开始位置 3. 读取大文件内容使用 readline()方法配合 死循环一起使用 ``` # 使用readline方法和死循环读取大文件 file = open("new.txt", "r", encoding="utf-8") while True: line_text = file.readline() print("%s" % line_text, end="") # 当读取到文件内容为空,字符串长度为0,跳出循环 if len(line_text) == 0: break file.close() ``` <details> <summary>文件读写案例---小文件的复制.py</summary> ``` ''' 目标: 把源文件中内容 拷贝到 目标文件中 ''' # 1.打开文件 # 打开源文件 file_read = open("new.txt", "r", encoding="utf-8") # 打开目标文件 file_write = open("new[复制小].txt", "w", encoding="utf-8") # 2.操作文件 # 读取源文件内容 text = file_read.read() # 把读取的内容写入目标文件中 file_write.write(text) # 3.关闭文件 file_read.close() file_write.close() ``` </details> <br /> <details> <summary>文件读写案例---大文件的复制.py</summary> ``` ''' 目标: 把源文件中内容 拷贝到 目标文件中 ''' # 1.打开文件 # 打开源文件 file_read = open("new.txt", "r", encoding="utf-8") # 打开目标文件 file_write = open("new[复制大].txt", "w", encoding="utf-8") # 2.操作文件 # 使用readline()按行 读取源文件内容 配合while True死循环 while True: line_text = file_read.read() # 把读取的内容写入目标文件中 file_write.write(line_text) # 当读取到源文件内容为空,字符串长度为0,跳出循环 if len(line_text) == 0: break # 3.关闭文件 file_read.close() file_write.close() ``` </details> <br /> ### **os模块对文件操作:** 1. rename 重命名文件 os.rename(源文件名, 目标文件名) 2. remove 删除文件 os.remove(文件名) 操作文件时,可以指定绝对路径和相对路径 <details> <summary>os模块对文件的操作.py</summary> ``` # os模块对文件的操作 import os # 01 rename 重命名文件 os.rename(源文件名,目标文件名) os.rename("info.txt", "test_info.txt") # 02 remove 删除文件 os.remove(文件名) os.remove("test_info.txt") # 支持相对路径和绝对路径 os.remove("D:\\rc12\\project\\hello\\new_file.java") ``` </details> <br /> ### **os模块对目录的操作:** 1. os.listdir(目录名) # 获取指定目录下所有内容,以列表的方式保存 2. os.mkdir(目录名) 创建目录 3. os.rmdir(目录名) rmdir()只能删除空目录 拓展: shutil模块中有 rmtree()方法删除非空目录 4. os.getcwd() 获取当前工作目录 5. os.chdir(目标目录) 修改工作目录 6. os.path.isdir(文件路径) 判断是否是文件夹,如果是目录,返回True,否则返回 False 7. os.path.exists(目录/刘件) 判断指定的目录名或文件名是否存在,如果存在返回True,否则返回False <details> <summary>os模块对目录的操作.py</summary> ``` # os模块对目录的操作 import os import shutil # 01 listdir 目录列表 os.listdir(目录名) # 查看指定录下所有文件,以列表的形式展现,默认获取的是当前目录 print(os.listdir(".")) print(os.listdir("./")) print(os.listdir()) print(os.listdir("D:\\rc12\\project\\hello\\new_file.java")) # 02 mkdir 创建目录 os.mkdir(目录名) os.mkdir("hello") os.mkdir("D:\\rc12\\project\\hello\\new") # 03 mkdir 删除目录 os.mkdir(目录名) rmdir()只能删除空目录 os.rmdir("hello") os.rmdir("python") # 拓展:shutil模块中 rmtree可以删除非空目录 shutil.rmtree("python") # 04 getcwd 获取当前目录 os.getcwd() print(os.getcwd()) # 05 chdir 修改工作目录 os.chdir(目标目录) os.chdir("PYTHON") print(os.getcwd()) # 06 path.isdir 判断是否是文件夹 os.path.isdir(文件夹路径) # 如果是目录,返回True,否则,返回False print(os.path.isdir("PYTHON")) print(os.path.isdir("new.txt")) # 07 os.path.exists(目录/文件) 判断指定的目录或文件是否存在,如果存在,返回True,否则返回False print(os.path.exists("readme.txt")) ``` </details> <br /> <details> <summary>批量修改文件名.py</summary> ``` # 批量修改文件名 import os import shutil # 1.批量创建文件 def create_files(): print(os.getcwd()) # (0)先判断 目录files是否存在,如果存在删除,如果不存在新建 if os.path.exists("./files"): shutil.rmtree("./files") # (1)先创建目录 files os.mkdir("./files") # (2)将工作目录切换到files目录下 os.chdir("./files") print(os.getcwd()) # (3)在files目录下 批量创建文件 for i in range(10): file = open("new.txt", "w", encoding="utf-8") file.write("hhhhhh") file.close() # 2.批量修改文件名 def change_files_name(): # (1)查看当前目录 是否为files print("---1---", os.getcwd()) # path保存的是files目录的路径 path = "D:\\new_project\\dayo7\\案例_批量修改文件名\\fiels" # 如果不是files目录,要切换到files目录下 if os.getcwd() != path: os.chdir(path) print("---2---", os.getcwd()) # 如果是files目录下,获取目录下所有的内容,os.listdir()以列表方式保存 files_name = os.listdir() print(files_name) # 使用for循环遍历列表,使用os.rename()重命名文件 for name in files_name: os.rename(name, "heima_" + name) # 调用函数 create_files() change_files_name() ``` </details> <br />