前言
掌握Python文件操作,解锁os、time、random模块的高级功能。从基础读写到目录管理、时间戳生成、随机数添加,实战案例带你领略高效安全的文件操作技巧。
一、文件
1.文件操作流程
1.打开文件
2.对文件中内容进行操作(读、写)
3.关闭文件
2.文件打开方式
2.1 直接打开
# 文件打开 # open() # 语法:open(file,mode,encoding) # file:要打开的文件(文件的路径【相对路径、绝对路径】) # mode:文件的访问模式(在打开文件时需要指定,如果不指定,默认只读) # encoding:在进行文件操作时可能会涉及到中文,如果不指定encoding参数会报错。参数值就是utf8 # open()方法的操作流程 # 1.文件对象 = open(file,mode,encoding) # 2.通过文件对象调用方法实现读写操作 # 3.让文件对象调用close方法实现文件关闭 open("aaa.txt") open("aaa.txt","r")
2.2 with方式打开
# with open()方法的操作流程-->推荐使用with语句 # 1.打开文件 # with open(file,mode,encoding) as 文件对象: # 2.在with缩进状态下对文件中的数据进行操作 # 3.关闭文件-->with不需要手动关闭--> 只要跳出with缩进状态,自动关闭文件句柄 # 使用with语句实现往文件中写入数据 with open("bbb.txt","w",encoding="utf8") as f: # 往文件中写入数据 f.write("张三"+'\n'+"李四") # 使用with语句实现从文件中读取数据 with open("bbb.txt","r",encoding="utf8") as f: # 从文件中读取数据 data = f.read() print(data)
3.文件访问模式
r:read 只读 不指定mode参数默认r;如果文件不存在则报错 w:write 只写 如果文件不存在则创建文件;如果文件存在且里面有内容,则覆盖原来的内容 a:add 追加 如果文件不存在则创建文件;如果文件存在则实现往文件中原有的内容后进行追加操作
4.文件读取数据
4.1 read()
# read() # 语法:文件对象.read(n) # 作用:从文件中读取n个字符;不指定参数默认读取文件中所有的内容;读取出来的数据类型是字符串 # 读取12个字符 "hello world\n" \n换行符在字符串中也是一个字符,在控制台打印时会自动转义成换行效果 data = f.read() print(data) print(type(data))
4.2 readline()
# readline() # 语法:文件对象.readline() # 作用:一次读取一行数据;读取出来的数据类型是字符串;如果空行,读取到的数据是一个字符串"\n",不是空字符串 data1 = f.readline() data2 = f.readline() data3 = f.readline() data4 = f.readline() data5 = f.readline() data = f.readline() print(data) print(type(data)) print(len(data)) # 使用readline方法实现获取文件中所有的内容 # 1. 一次readline读一行,不确定文件有多少行-->次数不确定-->死循环 while True: # 2.每循环一次,调用readline读取一行数据 data = f.readline() # 3.死循环需要条件结束,如果文件中内容已经读取结束了,需要结束死循环--->读取到的数据的长度为0,或者字符串是一个空字符串 if len(data) == 0: break else: print(data)
4.3 readlines()
# readlines() # 语法:文件对象.readlines() # 作用:以列表的形式读取文件中所有的内容,列表的每一项是文件的每一行 data = f.readlines() print(data)
5.文件写入数据
# 文件写入数据 # 1.打开文件 f = open("bbb.txt","w",encoding="utf8") # 2.文件操作-->读、写 # write() # 语法:文件对象.write(字符串类型的数据) # 作用:将字符串类型的数据写入文件中 f.write("你好"+"\n") f.write("hello") # 3.关闭文件 f.close()
6.文件关闭
# 关闭文件 文件对象.close() f.close()
7.补充:相对路径与绝对路径
7.1 相对路径
相对路径有参照物,相对于当前文件来说,想要查询的文件的位置 <!-- 相对路径:要查询的文件相对于当前文件的位置 同级文件: 文件名 例如:<img src="pic1.png"> 上一级文件:../ 例如:<img src="../pic1.png"> 下一级文件:/ 例如:<img src="img/pic1.png"> --> <img src="../mine/img/pic1.png">
7.2 绝对路径
1. 从盘符开始的路径 本地 2. 从http开始的路径 网络 <!-- 绝对路径: 1.从盘符开始的路径 本地 <img src="C:\Users\86134\Pictures\Saved Pictures\400.png"> 2.从http开始路径 网络 <img src="https://t7.baidu.com/it/u=2141219545,3103086273&fm=193&f=GIF"> --> <img src="https://t7.baidu.com/it/u=2141219545,3103086273&fm=193&f=GIF">
二、OS模块
1.对文件的操作
import os # 注意:1.文件名不要与模块名重名 2.模块导入在文件最上方 # os模块 # 对文件的操作 # rename # 语法:os.rename(old,new) # 作用:实现给文件重命名(注意文件路径) os.rename("../mine/img/pic1.png","pic2.png") # remove # 语法:os.remove(文件路径) # 作用:删除指定文件(彻底删除,无法复原) os.remove("bbb.txt")
2.对文件夹的操作
import os # os模块对文件夹的操作 # mkdir mk--》make制作生成 dir--》directory目录文件夹 # 语法:os.mkdir(文件夹要创建的位置路径) # 作用:创建单级空目录 os.mkdir("喜羊羊") # makedirs # 语法:os.makedirs(文件夹要创建的位置路径) # 作用:创建多级空目录 os.makedirs("喜羊羊/懒羊羊") # rmdir rm--》remove移除 dir目录 # 语法:os.rmdir(要删除的文件夹的路径) # 作用:删除单级空目录 os.rmdir("小灰灰") # removedirs # 语法:os.removedirs(要删除的文件夹的路径) # 作用:删除多级空目录 os.removedirs("喜羊羊/懒羊羊") # listdir # 语法:os.listdir(path) # 作用:罗列指定目录下所有的文件,包括隐藏文件;如果不指定路径,默认展示当前文件所在的父级目录下的内容 print(os.listdir("c:"))
三、文件拷贝案例
1.案例要求
无论用户输入的文件在哪里,都能实现在原路径下进行拷贝
2.实现思路
1.让用户输入要拷贝的文件
2.根据源文件得到新的文件名及文件路径
3.从源文件中读取所有的内容
4.将所有的内容写入新文件中
3.具体实现
# 文件拷贝案例 # 1.让用户输入要拷贝的文件 file = input("请输入要拷贝的文件:") # 2.根据源文件得到新的文件名及文件路径 # 整个字符串中最后一个点来区分文件名与后缀名-->获取最后一个点的下标位置-->rfind num = file.rfind(".") # 1>.获取源文件的文件路径及文件名 ole_file = file[:num] # 2>.获取源文件的文件后缀 old_end = file[num:] # 3>.在源文件的文件名及文件后缀中拼接 "-副本" new_file = ole_file + "-副本" + old_end print(new_file) # 3.从源文件中读取所有的内容 # 1>.打开文件 with open(file,"r",encoding="utf8") as f: # 2>.一次性读取文件中所有的内容 data = f.read() # 4.将所有的内容写入新文件中 # 1>.打开文件 w(如果文件不存在则自动创建) with open(new_file,"w",encoding="utf8") as f: # 2>.写入数据 f.write(data)
四、补充内置模块
1.time 时间模块
import time # time时间模块 # 文件名与模块名不要重名 # time() # 语法:time.time() # 作用:获取当前时间戳(从格林威治时间到当前电脑系统时间的秒数) # 应用场景:统计程序的运行时长 print(time.time()) # sleep() # 语法:time.sleep(n) # 作用:让程序休眠n秒 # 应用场景:等待接收验证码 print("哈哈哈哈哈哈") time.sleep(2) print("嘿嘿嘿嘿嘿嘿")
2.random随机数模块
import random # random随机数模块 # random() # 语法:random.random() # 作用:获取0-1之间的随机小数 print(random.random()) # randint() # 语法:random.randint(a,b) # 作用:获取a-b之间的随机整数,包括a和b # 应用场景:生成随机验证码 print(random.randint(10,30)) # chioce() # 语法:random.choice(数据) # 作用:随机获取数据中的一个元素 支持的数据类型:要求有长度且获取到元素;字符串、列表、元组 # 应用场景:随机点名 print(random.choice("hello"))
3. json序列化模块
js 数组,对象 python 列表,字典 序列化:将python列表、字典类型的数据转换成js字符串类型的数据 反序列化:将js字符串类型的数据,转换回python类型的数据 import json # json序列化模块 # dump() # 语法:json.dump(数据,文件对象,ensure_ascii=False) # 作用:将python列表字典类型的数据进行序列化操作(转换成json字符串)存放在文件中 my_dict = {"user":"张三","phone":"14523698745","email":"admin123@qq.com","pwd":123456} with open("1.txt","w",encoding="utf8") as f: json.dump(my_dict,f,ensure_ascii=False) # load() # 语法:json.load(文件对象) # 作用:将文件中json字符串类型的数据读取出来且进行反序列化操作(转换回python类型) with open("1.txt","r",encoding="utf8") as f: data = json.load(f) print(data) print(type(data)) # dumps() # 语法:json.dumps(数据,ensure_ascii=False) # 作用:将python列表字典类型的数据进行序列化操作(转换成json字符串) my_dict = {"name":"张三","gender":"男","age":18} my_str = json.dumps(my_dict,ensure_ascii=False) print(my_str) print(type(my_str)) # loads() # 语法:json.loads(json字符串类型的数据) # 作用:将json字符串类型的数据进行反序列化操作(转换回python类型) dict2 = json.loads(my_str) print(dict2) print(type(dict2))