一、基本流程

  • 打开文件得到文件句柄
  • 将文件句柄赋值给一个变量
  • 通过文件句柄对文件进行操作
  • 关闭文件

二、基本操作

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 全栈开发八 文件处理的更多相关文章

  1. python全栈开发-Day7 文件处理

    python全栈开发-Day7   文件处理 一 .文件操作 一 .介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必 ...

  2. python全栈开发_day8_文件的多种读写方式及游标

    一:文件的多种读写方式 主方式:w    r    a 从方式:t     b    + 了解方式:x    u 1)按t(按照字符进行操作): with open("data_1.txt& ...

  3. python全栈开发学习_内容目录及链接

    python全栈开发学习_day1_计算机五大组成部分及操作系统 python全栈开发学习_day2_语言种类及变量 python全栈开发_day3_数据类型,输入输出及运算符 python全栈开发_ ...

  4. Python全栈开发【面向对象】

    Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...

  5. Python全栈开发【基础一】

    Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与wh ...

  6. python 全栈开发之路 day1

    python 全栈开发之路 day1   本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...

  7. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

  8. Python 全栈开发【第0篇】:目录

    Python 全栈开发[第0篇]:目录   第一阶段:Python 开发入门 Python 全栈开发[第一篇]:计算机原理&Linux系统入门 Python 全栈开发[第二篇]:Python基 ...

  9. Python全栈开发【面向对象进阶】

    Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...

随机推荐

  1. linux远程安装和使用

    Putty:一个Telnet.SSH.rlogin.纯TCP以及串行接口连接软件,体积小.完全免费.使用方便快捷,基本的功能都有.有点不好的地方:在一界面上一次只能打开一个窗口,对于快速查看和操作不太 ...

  2. 【Java并发编程六】线程池

    一.概述 在执行并发任务时,我们可以把任务传递给一个线程池,来替代为每个并发执行的任务都启动一个新的线程,只要池里有空闲的线程,任务就会分配一个线程执行.在线程池的内部,任务被插入一个阻塞队列(Blo ...

  3. angular ng-repeat中DOM的重新渲染机制(项目中遇到问题)

    昨天在项目中遇到一个问题:文本框中输入值只要变化就要请求接口获取数据赋值给couponData,这样性能不好.所以和服务器端沟通改成了服务器端一次性返回所有数据,这样前端只要获取一次数据然后保存在对象 ...

  4. sometimes we should use "disable fork" instead of "disable block_name"

    A disable named block statement stops the execution of all blocks with that same name in all threads ...

  5. 蚂蚁金服缘何自研Service Mesh?

    2018年,微服务方兴未艾,Service Mesh(服务网格)又快速崛起.有观点认为,2018年可被称之为“Service Mesh元年”,在未来两年中,Service Mesh将迎来爆发式增长,成 ...

  6. SQL Server 查询数据库中被锁定的表

    在一次测试过程中,发现有些表一直被锁定,从网上搜集了下资料,可以使用一下语句查看数据库中那些表正被锁定: select request_session_id spid,OBJECT_NAME(reso ...

  7. C和C指针小记(七)-整型变量范围

    1.变量范围 limits.h 头文件中定义来C 语言的变量范围. 变量范围的限制 //char 的范围 printf("CHAR_BIT:%d CHAR_MIN:%d CHAR_MAX:% ...

  8. [security] security engine things

    1. luarock luarock 之于 lua,就好比 pip 之于 python https://luarocks.org/ 2.  lua的库 [root@base package]# ls ...

  9. BouncyCastle 密钥转换 - Java

    转自: https://blog.csdn.net/a351945755/article/details/63707040 1. PKCS#8 转 PKCS#1 You will need Bounc ...

  10. python之文件操作的几种模式总结

    文件操作的几种模式: "w"                             #write ,清空写,生成一个新的文件,写入内容,覆盖原文件"w+"  ...