文件的种类很多以下是一些举例 文件的目的就是把数据存起来(持久化), 而不必每次都重新生成.
1.2文件的打开与关闭 想一想:
如果想用word编写一份简历,应该有哪些流程呢?
打开word软件,新建一个word文件 写入个人简历信息 保存文件 关闭word软件 同样,在操作文件的整体过程与使用word编写一份简历的过程是很相似的
打开文件,或者新建立一个文件 读/写数据 关闭文件
open(文件名,访问模式)
示例如下:
# w 写入模式 r 读取模式 f = open('123.txt', 'w') 1.2.2关闭文件 # 新建一个文件,文件名为:123.txt f = open('123.txt', 'w') # 关闭这个文件 f.close() 1.2.3自动关闭文件 with open("123.txt", "w") as f: pass # 执行完缩进代码, 会自动关闭文件 访问模式 说明 r 只用于读取, 默认模式。文件不存在,会报错。 w 只用于写入。文件存在则先清空内容, 文件不存在,创建新文件。 a 只用于写入。文件存在则追加内容, 文件不存在,创建新文件。 r+ 用于读写。文件不存在,会报错。 w+ 用于读写。文件存在则先清空内容, 文件不存在,创建新文件。 a+ 用于读写。文件存在则追加内容, 文件不存在,创建新文件。 rb 二进制格式的只读操作。后续网络课程中具体讲解。 wb 二进制格式的只写操作。后续网络课程中具体讲解。 ab 二进制格式的追加操作。后续网络课程中具体讲解。1.3with open() 基本操作
# read() 将所有的内容全部读取出来 with open('123.txt') as f: content = f.read() print(content) # read(n) 指定读取的字符数 with open('123.txt') as f: content = f.read(4) print(content) # readline() 每次读一行 with open('123.txt') as f: while True: content = f.readline() # hello\n python if len(content) == 0: break print(content, end="") # print()会默认换行(会在结尾自动添加\n), 可以通过end参数手动设置结尾的内容 # readlines() 读取出所有内容 每行一个元素,返回列表 with open('123.txt') as f: content = f.readlines() print(content)1.4文件的相关操作 有些时候,需要对文件进行重命名、删除等一些操作,python的os模块中都有这些功能
文件重命名删除文件创建文件夹获取当前目录改变默认目录获取目录列表删除文件夹 import os # 文件重命名 文件操作中都是对路径进行处理,不是对文件名进行处理 os.rename("123.txt", "666.txt") # 文件删除 os.remove("666.txt") # 创建文件夹 os.mkdir("demo") # 获取当前路径 默认为项目目录 print(os.getcwd()) # 修改当前路径 os.chdir("demo") print(os.getcwd()) os.mkdir("demo2") # 列出目录中的内容(子文件夹和文件) print(os.listdir()) # 默认列出当前路径 # 删除空文件夹 os.rmdir("demo")2.1文件的偏移
# 文件读写都会导致文件定位移动(光标移动) with open("123.txt", 'w+') as f: # 文件的tell方法可以查看当前定位 print(f.tell()) f.write("hello python") # 可以使用文件的seek方法 修改文件定位 # 参数whence 0 表示移动光标到文件开头 1 表示当前位置不变 2 表示移动光标到文件末尾 # 参数offset 基于whence设置偏移 seek(2, 0) 先移动光标到文件开头,再向右移动两个位置 # offset只能对文件开头设置偏移 whence=1 或 2, offset只能是0 f.seek(0, 1) print(f.tell()) f.seek(0, 0) print(f.tell()) content = f.read() print("内容为:%s" % content)2.2 删除非空文件夹-递归实现
import os def custem_rmdir(path): """ 删除非空文件夹 :param path: 文件夹路径 :return: None """ # 判断是文件夹是否为空 if len(os.listdir(path)): # 遍历其中的内容 将这些内容全部删除 for sub_name in os.listdir(path): # print(sub_name) # 判断是文件还是文件夹 sub_path = os.path.join(path, sub_name) if os.path.isfile(sub_path): # 是文件就删除 os.remove(sub_path) else: # 是文件夹, 就递归 custem_rmdir(sub_path) os.rmdir(path) if __name__ == '__main__': path = 'test' custem_rmdir(path)