Python 全栈开发八 文件处理
一、基本流程
- 打开文件得到文件句柄
- 将文件句柄赋值给一个变量
- 通过文件句柄对文件进行操作
- 关闭文件
二、基本操作
1、文件句柄
f = open("a.txt",encoding="utf-8") #f为文件句柄,通过文件句柄我们进行操作
data = f.read()
'''
该操作是在内存中运行:读取硬盘中的文件,即将二进制读取出来
所以要提供编码方式,因为存入的时候是以utf-8编码的,所以在
读取时要使用utf-8
'''
2、文件读写编码问题
在读的时候:指定打开编码,该编码与写入文件的编码需要一样否则会乱码
在写的时候:指定写的编码,不能使用不同的编码,否则打开的时候容易乱码
3、文件的读写模式
只读模式:默认就为只读模式
f = open("a.txt","r",encoding="utf-8")
data = f.read()
f.readable() #判断一个文件是不是可读
f.close() #打开文件后必须关闭文件
读取一行和读取多行
读取一行
f = open("a.txt","r",encoding="utf-8")
data2 = f.readline()
print(f.readline(),end="")
'''
注意:在同一个文件句柄中,是一行一行读,读取完后
光标的在文件最后的。同时在读取的时候会出现换行现
象,可以在打印的时候加上end = ""来取消换行
'''
f.close() #打开文件后必须关闭文件
读取多行
f = open("a.txt","r",encoding="utf-8")
data3 = f.readlines() #读取文件的所有行,并且以列表的形式表现出来
f.close() #打开文件后必须关闭文件
只写模式:写的参数必须为字符串,不能为其他类型
f = open('yesterday2.txt','w',encoding='utf-8') # 只写模式,若文件存在则会覆盖,若文件不存在,则创建一个文件
f.write('I love you')
以列表的形式写入多行:
f = open("b.txt","w",encoding="utf-8")
f.writelines(["aaa\n","bbb\n","ccc\n"]) #以列表的形式写入多行
f.close()
追加操作:
f = open('yesterday','a',encoding='utf-8') #追加,也可读,不存在则创建,存在则在末尾追加,只能在末追加
f.write('I love you')
f.close()
打开文件的第二种形式:
#常用的打开文件方式,在对文件进行操作的时候要在with内部
with open('yesterday','r',encoding='utf-8') as f,\
open('yesterday.txt','r',encoding='utf-8') as f2: #这种方式打开文件会自动关闭,而且可以同时打开多个文件
f.read()
文件的b模式:
rb模式:
'''
bytes读写优点:处理图片,视频等文件等
''' #rb读
# f = open("a.txt","rb",encoding="utf-8") b的方式不需要指定编码,以为硬盘存的就是二进制 #存取过程 字符串------>encode()------->bytes
#读取过程 bytes------>decode()------->字符串 f = open("a.txt","rb")
data = f.read()
f.close() #wb写 f1 = open("b.txt","wb") #写wb指以bytes写
# f.write(b"aaaa\n") #写的时候必须是bytes类型,不能用这种方式,因为没有指定编码方式
f.write(bytes("aaaaa",encoding="utf-8")) #指定以什么编码方式,变成bytes类型的
f.writelines("aaaaa".encode("utf-8")) #这种方式也可以 #ab写: f2 = open("b.txt","ab") #在写的时候,写到最后一行
f.write("aaaaa".encode("utf-8"))
+默式:
#只写模式
f = open('yesterday','r+',encoding='utf-8')
f.read() #若是先读再写,则是在文件内容后面追加,即从光标上写
f.write('maibeyby') #是直接写,则是从开头写,把原来内容覆盖,而不是挤出去
f.close() # f = open('yesterday','w+',encoding='utf-8') #写读模式,必须先写入,在把光标移至开始才能读,没什么用
# f.write('i love you')
# f.seek(0)
# print(f.read()) # f = open('yesterday','a+',encoding='utf-8') #在追加中增加可读模式
# f.seek(0)
# print(f.read())
# f.write('\ni love you1')
文件处理其他方法:
'''
在Windows中换行为\r\n,而pyhon解析出来的是\n,这是Python里面经过
处理了,这样是为了避免不同操作系统的换行不一样而处理的,要想显示其
原本的换行符,在打开文件的时候加上newline=""
'''
f = open("c.txt","w",encoding="utf-8",newline="")
# f.encoding #显示文件打开的编码
'''
我们写的数据是存在内存上,不会马上存入硬盘,使用flush()可以马上将它存
入硬盘,操作系统会每隔一段时间使用一下flush()。
'''
f.flush() #将内存的数据刷到硬盘上
fl = open("a.txt","r+",encoding="utf-8")
'''
文件光标处理:
除了read()以外,read读取的是字符,其他方法的光标是以字节为单位的
'''
print(fl.tell() ) #先显示当前光标位置 0
print(fl.readline()) #读取一行
print(fl.tell()) #显示光标所在的位置, 32
fl.seek(0) #可以控制光标的为在0是按字节的方式
Python 全栈开发八 文件处理的更多相关文章
- python全栈开发-Day7 文件处理
python全栈开发-Day7 文件处理 一 .文件操作 一 .介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必 ...
- python全栈开发_day8_文件的多种读写方式及游标
一:文件的多种读写方式 主方式:w r a 从方式:t b + 了解方式:x u 1)按t(按照字符进行操作): with open("data_1.txt& ...
- python全栈开发学习_内容目录及链接
python全栈开发学习_day1_计算机五大组成部分及操作系统 python全栈开发学习_day2_语言种类及变量 python全栈开发_day3_数据类型,输入输出及运算符 python全栈开发_ ...
- Python全栈开发【面向对象】
Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...
- Python全栈开发【基础一】
Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与wh ...
- python 全栈开发之路 day1
python 全栈开发之路 day1 本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...
- python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)
python全栈开发笔记第二模块 第四章 :常用模块(第二部分) 一.os 模块的 详解 1.os.getcwd() :得到当前工作目录,即当前python解释器所在目录路径 impor ...
- Python 全栈开发【第0篇】:目录
Python 全栈开发[第0篇]:目录 第一阶段:Python 开发入门 Python 全栈开发[第一篇]:计算机原理&Linux系统入门 Python 全栈开发[第二篇]:Python基 ...
- Python全栈开发【面向对象进阶】
Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...
随机推荐
- iOS - 高德地图将地图的多点连线
@property (nonatomic, strong) MAPolyline *commonPoly; #pragma mark -- 将地图的点连线 - (void)createBrokenLi ...
- lamp环境配置
一.配置虚拟域名 1.为了模拟DNS,在本地hosts文件中设置一下 2.模拟三个项目 3.在apache中配置虚拟主机 去到apache的sites-available目录里复制三次def ...
- node_readline (逐行读取)
node官方文档 用于逐行读取文件流, 和终端交互 读取文件流 const fs = require('fs'); const readline = require('readline'); var ...
- [Android实例] Android Studio插件-自动根据布局生成Activity等代码1.4 (开源)(申明:来源于网络)
[Android实例] Android Studio插件-自动根据布局生成Activity等代码1.4 (开源)(申明:来源于网络) 地址:http://www.eoeandroid.com/thre ...
- css学习_css书写规范
css书写规 1.空格规范: div { color: red; } 2.选择器规范 3.属性 属性定义要另起一行 属性定义后必须以分号结尾 div { color: red; font-size: ...
- ROS中.launch文件的remap标签详解
https://www.cnblogs.com/LiuQiang921202/p/7679943.html
- [No000013F]WPF学习之X名称空间详解
X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML代码将XAML代码编译为CLR代码. 4.1X名称空间里面到底都有些什么? x名称空间映射的是:htt ...
- [No0000F9]C# 运算符重载
您可以重定义或重载 C# 中内置的运算符.因此,程序员也可以使用用户自定义类型的运算符.重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的.与其他函数一样,重载运 ...
- tensorflow模型在实际上线进行预测的时候,使用CPU工作
最近已经训练好了一版基于DeepLearning的文本分类模型,TextCNN原理.在实际的预测中,如果默认模型会优先选择GPU那么每一次实例调用,都会加载GPU信息,这会造成很大的性能降低. 那么, ...
- zookeeper集群迁移方案
后来问同事是怎么做的迁移:先启动一套新的集群,然后关闭老的集群,同时在老集群的一个IP:2181起了一个haproxy代理新集群以为这样,可以做到透明迁移=.=,其实是触发了ZK的bug-832导致不 ...