python高级 之(五) --- 文件操作
文件操作
"""
在程序中操作的文件内容:
1. 读取文件中的内容
2. 向文件中写入内容 首先:
在程序中与文件建立一个通道,通过通道操作文件指针,达到所要的结果
向文件中不管读和写,在程序中都需要打开一个文件 文件打开方式:open()。会返回一个操作文件的手柄,可以理解为程序与文件之间建立的通道
handle = open(文件的路径,打开文件的模式--读、写,encoding="操作的文件到的编码方式")
详解:
1。文件路径既可以使用相对路径,也可以使用绝对路径
2。打开方式:
r --- 只读,如果指定路径对应文件不存在,回报错
w --- 只写,如果文件不存在,会创建新文件,如果文件存在 会清空文件中原来的内容 文件指针位于0处
a --- 只写,如果文件不存在,会创建新文件,如果存在 不会清空原文件的内容 文件指针位于文件的末尾 r/w/a 这种模式,操作的字符串数据
rb/wb/ab 这种模式操作的是字节数据
r+/w+/rb+/wb+/ab+ 带有 + 号的是可读可写
3。编码方式:
urg-8/gbk
注意:程序无法处理程序之外产生的垃圾。需要手动处理垃圾(手动把通道关闭)
如果是字节模式处理数据打开文件时,不需要设置编码方式,否则会报错
"""
文件读取
# 文件读取
"""
读取文件内容,是通过文件手柄来完成的
读取的方式:
read([size])
如果不为size设值,默认是将文件中的内容全部读取
如果设置size值:若文件中所剩内容小于size,文件剩多少读多少
模式设置为"r", 表示读取size个字符
模式设置为"rb", 表示读取size个字节
readling()
一行一行读取
模式设置为"r", 表示读取的是一行的字符串数据
模式设置为"rb", 表示读取是一行的字节数据
readlines()
按照行的样式,将文件中所有的数据读出。结果是列表类型的,一行为一个元素存放在列表中
模式设置为"r", 列表中的每个元素是字符串类型
模式设置为"rb", 列表中每个元素是字节数据类型的
"""
- read()
# read()。以 r 的形式 读取数据 # 设置操作文件的路径
path = r"静夜思.txt"
# 在程序中打开文件,建立文件与程序的通道。 以字符型数据读取
handle = open(path,"r",encoding="utf-8") # 通过手柄操作文件指针,读取数据
data_str = handle.read()
print(data_str) # 设置读取大小时,读取部分之后 文件指针到了3的位置,再读的话从第4位置开始读取
data_string = handle.read(3)
print(data_string) # 结果:窗前名 # 关闭通道
handle.close() # ------------------------------------------------------------------ # # read()。以 rb 的形式 读取数据 # 设置操作文件的路径
path = r"静夜思.txt"
# 在程序中打开文件,建立文件与程序的通道。 以字节型数据读取
handle = open(path,"rb") # 以rb形式进行读取
data = handle.read(3)
print(data)
print(data.decode(encoding="utf-8")) # 关闭通道
handle.close()
- readline()
# readline()。以 r 的形式读取一行数据 # 设置操作文件的路径
path = r"静夜思.txt"
# 在程序中打开文件,建立文件与程序的通道。 以字符型数据读取
handle = open(path,"r",encoding="utf-8") # 通过手柄操作文件指针,读取数据
data_str = handle.readline()
print(data_str) # 关闭通道
handle.close() # ------------------------------------------------------------------------ # # readline()。以 rb 的形式读取一行数据 # 设置操作文件的路径
path = r"静夜思.txt"
# 在程序中打开文件,建立文件与程序的通道。 以字符型数据读取
handle = open(path,"rb") # 通过手柄操作文件指针,读取数据
data_str = handle.readline()
print(data_str) # 结果:b'\xe7\xaa\x97\xe5\x89\x8d\xe5\x90\x8d\xe5\xa4\x9c\xe5\x85\x89\n'
print(data_str.decode(encoding="utf-8")) # 关闭通道
handle.close()
- readlins()
# readlines()。以 r 的形式读取一行数据 # 设置操作文件的路径
path = r"静夜思.txt"
# 在程序中打开文件,建立文件与程序的通道。 以字符型数据读取
handle = open(path,"r",encoding="utf-8") lines = handle.readlines()
print(lines) # 结果: ['窗前名夜光\n', '疑是地上霜\n', '举头望明月\n', '低头思故乡'] # 关闭通道
handle.close()
# ------------------------------------------------------------------------------# # readlines()。以 rb 的形式读取一行数据 # 设置操作文件的路径
path = r"静夜思.txt"
# 在程序中打开文件,建立文件与程序的通道。 以字符型数据读取
handle = open(path,"rb") lines = handle.readlines()
print(lines)
# 此时 列表中的数据全部是字节类型的。将列表中的数据 全部设置成字符串类型的
# 注意:⚠️ 字节数据只能和字符串进行编码解码,列表不可以
new_list = [ele.decode("utf-8") for ele in lines]
print(new_list) # 关闭通道
handle.close()
- 大文件读取
"""
读取大型文件:
流程,读取模式是rb。以字节的形式进行读取的
将文件内容分批按照1024的倍数进行读取
分批读取结束点:可以获取文件的大小后,与每次读取的累加数量进行比较, """
import os
path = r"/Users/guoyapeng/Downloads/day12/20.数据持久化.mp4" # 打开路径指向的文件
handle = open(path,"rb") # 获得文件的大小
file_size = os.path.getsize(path)
print(file_size) # 分批进行读取。设置每批读取数据的大小,一般设置为1024的倍数。
read_size = 1024 # 已经读取的字节数据
has_read = 0 # 循环读取,已读的 < 文件大小
while has_read < file_size:
data = handle.read(read_size)
print(data)
# 为已读取进行累加
has_read += read_size
print("读取完毕") # 关闭通道
handle.close()
文件写入
# 写入文件
"""
打开文件模式:
w/wb --- 以字符串/字节数据向文件中写入内容
如果文件不存在,创建文件;文件存在,会清空文件中的内容,文件指针位于0处
a/ab --- 以字符串/字节数据向文件中写入内容
如果文件不存在,创建文件;文件存在,不会清空文件中的内容,文件指针位于末尾处 写入的方法:
write(字符串/字节数据)
w/a --- 字符串数据
wb/ab --- 字节数据
writelines(列表)
与readlines是一对。
列表中的数据 是要写入的内容
如果写入模式是 w/a --- 写入的列表内容是字符串类型
如果写入模式是 wb/ab --- 写入的列表内容是字节类型 刷新 flush()
刷新通道,将通道中的数据快速到达文件中 """
"""===========================================================""" # write() 以a/w的形式写入
# 打开文件获得与文件关联的通道
path = r"春晓.txt" # 创建写入文件,并设置通道
handle = open(path,"a",encoding="utf-8") # 写的方法
handle.write("\n夜来风雨声")
handle.flush() # 关闭通道
handle.close() """==========================================================""" # write() 以ab/wb的形式写入
# 打开文件获得与文件关联的通道
path = r"春晓.txt" # 创建写入文件,并设置通道
handle = open(path,"ab") # 写的方法
handle.write("\n夜来风雨声ab".encode("utf-8"))
handle.flush() # 关闭通道
handle.close() """=============================================================""" # writelines() 以a/w的形式写入
# 打开文件获得与文件关联的通道
path = r"春晓.txt" # 创建写入文件,并设置通道
handle = open(path,"a",encoding="utf-8") # 写的方法
lines = ["花落知多少\n","小桥流水人家aaa\n"]
handle.writelines(lines)
handle.flush() # 关闭通道
handle.close() """==============================================================""" # writelines() 以ab/wb的形式写入
# 打开文件获得与文件关联的通道
path = r"春晓.txt" # 创建写入文件,并设置通道
handle = open(path,"ab") # 写的方法
lines = ["花落知多少\n".encode("utf-8"),"小桥流水人家\n".encode("utf-8")]
handle.writelines(lines)
handle.flush() # 关闭通道
handle.close()
文件拷贝
"""
文件拷贝:操作的还是文件的内容
通过读取文件内容 和写入文件内容完成拷贝
拷贝思路:
源文件 读取文件
目标文件 写入文件 """
import os # 源文件路径
src_path = r"/Users/guoyapeng/Downloads/day12/20.数据持久化.mp4" # 目标存储路径
desc_path = r"/Users/guoyapeng/Downloads/数据持久化.mp4" # 在程序中打开这两个路径文件
src_handle = open(src_path,"rb")
desc_handle = open(desc_path,"wb") # 循环读取。设置每次读取的数量
read_size = 1024 * 10 # 已经读取的数据的大小
has_read = 0 # 文件大小
file_size = os.path.getsize(src_path) while has_read < file_size:
data = src_handle.read(read_size)
# 向目的文件内 写入
desc_handle.write(data)
desc_handle.flush()
# 设置已读的数据
has_read += read_size # 关闭路径
src_handle.close()
desc_handle.close()
with语句
"""
为了简化代码
程序无法处理程序之外产生的垃圾,所以需要手动关闭通道
使用with语句打开通道 可以不用手动关闭。with语句执行完通道会自动关闭 格式:
with open(文件路径,打开模式,编码方式) as 变量名1,open(文件路径,打开模式,编码方式) as 变量名2,、、、[后面可以拼多个open()]
、、open(文件路径,打开模式,编码方式) as 变量名n:
[缩紧]执行文件的操作
"""
# 读
with open("静夜思.txt","r",encoding="utf-8") as handle:
data_str = handle.read()
print(data_str) # 写
with open("春晓.txt","w",encoding="utf-8") as handle:
handle.write("with用法")
handle.flush()
数据持久化
"""
永久性的保存数据,没有数据库想要进行本地保存,只能借助于文件
可以保存任意类型的数据 需要借助模块:pickle 保存数据
pickle.dump(保存的数据,数据存入的指定文件)
保存数据,将数据写入到指定文件。这种情况打开文件的模式只能使用字节模式打开 读取数据
变量名 = pickle.load(数据存入的指定文件)
将数据在文件中读取出来。需要打开文件,只能使用字节模式
"""
import pickle # 存入数据 一般情况存入的是一个容器
with open("data.txt","wb") as handle:
pickle.dump([10,20,3,45,"a"],handle) # 取出数据
with open("data.txt","rb") as handle:
data = pickle.load(handle)
print(data)
python高级 之(五) --- 文件操作的更多相关文章
- python之路(五)-文件操作
文件操作无非两个,即:读.写 python 2.x: 文件句柄 = file('文件路径', '模式') python3.x: 文件句柄 = open('文件路径', '模式') 打开文件的模式有: ...
- python学习笔记(五)-文件操作2
一.文件修改 现有文件file.txt,内容如下:二十四节气歌春雨惊春清谷天,夏满芒夏暑相连.秋处露秋寒霜降,冬雪雪冬小大寒.上半年逢六廿一,下半年逢八廿三.每月两节日期定,最多相差一二天.要求:将文 ...
- python成长之路五-文件操作
1,文件操作 f = open("D:\种子.txt",encoding="utf-8",mode="r") # 打开一个种子.txt文件, ...
- 第三章:Python基础の函数和文件操作实战
本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...
- Python 字符编码及其文件操作
本章节内容导航: 1.字符编码:人识别的语言与机器机器识别的语言转化的媒介. 2.字符与字节:字符占多少个字节,字符串转化 3.文件操作:操作硬盘中的一块区域:读写操作 注:浅拷贝与深拷贝 用法: d ...
- Python 深浅copy 和文件操作
深浅copy 1,先看赋值运算. l1 = [1,2,3,['barry','alex']] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 3, ['barry', ...
- Python基础-week03 集合 , 文件操作 和 函数详解
一.集合及其运算 1.集合的概念 集合是一个无序的,不重复的数据组合,它的主要作用如下 *去重,把一个列表变成集合,就自动去重了 *关系测试,测试两组数据之前的交集.并集.差集.子集.父级.对称差集, ...
- Python基础知识(八)----文件操作
文件操作 一丶文件操作初识 ###f=open('文件名','模式',编码): #open() # 调用操作系统打开文件 #mode #对文件的操作方式 #encoding # 文件的编码格式 存储编 ...
- Python修炼之路-文件操作
Python编程之文件操作 文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 每次文件打开.读取信息时,Python自动记录所达到的位置,好比一个书签,之后每一次 ...
随机推荐
- .Net界面开发神器—DevExpress官方汉化包免费下载!还在等什么?
点击获取DevExpress v19.1.7新版试用下载 DevExpress Localization Service允许您创建一组自定义的附属程序集,要将语言包添加到程序集中,请查看本文中为大家列 ...
- 一款强大的Visual Studio插件!CodeRush v19.1.9全新来袭
CodeRush是一个强大的Visual Studio® .NET 插件,它利用整合技术,通过促进开发者和团队效率来提升开发者体验.CodeRush能帮助你以极高的效率创建和维护源代码.Consume ...
- [Python之路] 元类(引申 单例模式)
一.类也是对象 当我们定义一个变量或者函数的时候,我们可以在globals()的返回值字典中找到响应的映射: def A(): print("This is function A" ...
- IE8下,去除iframe的边框
iframe边框通过css设定在FF下正常在ie下却还存在边框,设置frameborder="0"和border="0"可以去掉讨厌的iframe边框 < ...
- 小程序日期格式(yyyy-MM-dd HH:mm:ss)转(yyyy/MM/dd HH:mm:ss)
let newDate = (date).replace(/-/g, '/'); var date = new Date(newDate).getTime();
- java源码学习(一)String
String表示字符串,Java中所有字符串的字面值都是String类的实例,例如"ABC".字符串是常量,在定义之后不能被改变,字符串缓冲区支持可变的字符串.因为 String ...
- CodeForces–830A--二分,贪心
Office Keys time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- From 7.15 To 7.21
From 7.15 To 7.21 大纲 竞赛 一周七天, 总共做三十五到四十道题吧, 题解要一起写了, 周六之前写不完的话就只能回家补咯 加上考试题总共做了25道题... 还要学计算几何, 生成函数 ...
- 编写可维护的JavaScript代码(部分)
平时使用的时VS来进行代码的书写,VS会自动的将代码格式化,所有写了这么久的JS代码,也没有注意到这些点.看了<编写可维护的javascript代码>之后,做了些笔记. var resul ...
- 一、Vue基础之常用方法
一.JSON.parse() 与 JSON.stringify() 1.JSON.parse() :是从一个字符串中解析出 json 对象 //定义一个字符串 var data='{"nam ...