python day08 文件操作
1 .文件基本操作
obj = open('路径',mode='模式',encoding='编码') # 打开文件
obj.write() # 写入内容
obj.read() # 读取文件
obj.close() # 关闭文件
2. 打开模式
- r / w / a 【只读只写字符串】
- r+ / w+ / a+ 【可读可写字符串】
- rb / wb / ab 【只读只写二进制】
- r+b / w+b / a+b 【可读可写二进制】
2.1 模式:r / w / a
1.读取 r
# 打开文件
file_object = open('log.txt',mode = 'r',encoding = 'utf-8')
'# log.txt' 文件路径 encoding = 'utf-8' 存储时的方式,用什么方式存储就用什么方式读取读取内容
# 读取文件
content= file_object.read() # 读取文件的内容到内存(全部)
print(content)
# 关闭文件
file_object.close()
r 只能读不能写,文件不存在则报错。
2.写入 w
# 打开文件
file_object = open('log.txt',mode = 'w',encoding = 'utf-8')
# 写入内容
file_object.write('李忠伟')
# 关闭文件
file_objet.close()
w 只能写不能读
w 要慎重使用,使用 w 打开文件时是先清空文件再写入内容的。一般用于新建文件(文件不存在则新建)。
3.追加 a
# 打开文件
file_object = open('log.txt',mode = 'a',encoding = 'utf-8')
# 写入内容
file_object.write('你好')
# 关闭文件
file_objet.close()
a 只追加不能读,只在文件内容的最后面追加。
文件不存在则新建
2.2 模式:r+ / w+ / a+
1.可读可写 r+
# 打开文件
file_object = open('log.txt',mode = 'r+',encoding = 'utf-8')
file_object.seek(3) # 把光标移到文件开头第3个字节的位置
file_object.write('999') # 在第3个字节的位置写入999 # 读取内容
content= file_object.read()
print(content)
file_object.write('666') # 在前面写入的999的位置处写入666 # 关闭文件
file_object.close()
写入时:根据光标的位置,从当前光标位置开始进行写入操作(可能会将光标后其他的文字覆盖)
总结:
- 读:默认从0的光标开始读,也可以通过seek调整光标的位置
- 写:从光标所在的位置开始写,也可以通过seek调整光标的位置。
2.可读可写 w+
file_object = open('log.txt',mode = 'w+',encoding = 'utf-8') data = file_object.read()
print(data) # 文件是空的
file_object.write('alex') # a
file_object.seek(0) # b
file_object.read() # c
'# a+b+c这三步:a 写完后光标在最后面,想要进行 c 读取,需要在 c 前加入 b 将光标跳到0字节位置处(即文件开头位置)
print(data) file_object.close()
写入时会将文件清空,读取时需要调整光标的位置开始读取。
总结:
- 读:默认光标永远在写入的最后或0(打开清空了还没写入时在0的位置),也可以通过seek调整光标的位置。
- 写:先清空
3.可读可写 a+
file_object = open('log.txt',mode = 'a+',encoding = 'utf-8') file_object.seek(0)
data = file_object.read()
print(data) file_object.seek(0)
file_object.write('666') file_object.close()
总结:
- 读:默认光标在最后,也可以通过seek调整光标的位置,然后再去读取。
- 写:永远写到最后
2.3 模式:rb / wb / ab
1.rb 二进制读取
rb 只能二进制读取不能二进制写,文件不存在则报错。
2.wb 二进制写入
wb 只能二进制写入不能二进制读取
wb 要慎重使用,使用 wb 打开文件时是先清空文件再写入内容的。一般用于新建文件(文件不存在则新建)。
3.ab 二进制追加
ab 只追加不能读,只在文件内容的最后面追加。
文件不存在则新建
2.4 模式:r+b / w+b / a+b
1.可读可写二进制 r+b
写入时:根据光标的位置,从当前光标位置开始进行写入操作(可能会将光标后其他的文字覆盖)
总结:
- 读:默认从0的光标开始读,也可以通过seek调整光标的位置
- 写:从光标所在的位置开始写,也可以通过seek调整光标的位置。
2.可读可写二进制 w+b
写入时会将文件清空,读取时需要调整光标的位置开始读取。
总结:
- 读:默认光标永远在写入的最后或0(打开清空了还没写入时在0的位置),也可以通过seek调整光标的位置。
- 写:先清空
3.可读可写二进制 a+b
总结:
- 读:默认光标在最后,也可以通过seek调整光标的位置,然后再去读取。
- 写:永远写到最后
3. 操作
3.1 读操作
read() , 全部读到内存
read(1)
1表示一个字符
obj = open('a.txt',mode='r',encoding='utf-8')
data = obj.read(1) # 1个字符
obj.close()
print(data)
1表示一个字节
obj = open('a.txt',mode='rb')
data = obj.read(3) # 1个字节
obj.close()
读取小文件:
file_object = open('log.txt',mode = 'r',encoding = 'utf-8') data = file_object.read() # 读取文件的所有内容到内存
data = file_object.read(2) # 从当前光标所在的位置向后读取文件两个字符
data_list = file_object.readlines() # 读取文件的所有内容到内存,并按照每一行进行分割到列表中。 (每行结尾会隐藏着一个换行符 \n)
读取一个特别大的文件:
# 方式一:
start = 0
while True:
data = file_object.read(2)
print(data) file_object.close() # 最后一直在循环空,终止条件不好设定。 # 方式二:
for line in file_object:
line = line.strip() # 打印完后每行都存在一个换行符,strip 不但能去除空白,也能去除换行符\n print(line)
3.2 写操作
write(字符串)
obj = open('a.txt',mode='w',encoding='utf-8')
obj.write('中午你')
obj.close()
write(二进制)
obj = open('a.txt',mode='wb') # obj.write('中午你'.encode('utf-8'))
v = '中午你'.encode('utf-8')
obj.write(v) obj.close() # 字符串转换 “二进制”:
v = "你好"
data = v.encode('utf-8')
# 二进制转换成字符串
v = b'\xe6\x88\x91\xe5\xa5\xbd\xe5\x9b\xb0'
data = v.decode('utf-8')
写入练习:
# 示例一 : 一般用于文字写入。
f = open('a.txt',mode='w',encoding='utf-8')
# a. 将 “你好” 根据encoding指定的编码转换成:
# “你好” --> 10001000 10001000 10001000 10001000 10001000 10001000
# b. 将二进制写入到文件中。
f.write('你好') # w打开文件,则write传入字符串
f.close() # 示例二:写入内容是否写在一行
file_object = open('log.txt',mode = 'w',encoding = 'utf-8')
# '你好小黑'写在一行
file_object.write('你好')
file_object.write('小黑')
# '你好' 与 '小黑' 写成两行
file_object.write('你好\n')
file_object.write('小黑')
file_object.close() # 示例三:一般用于图片/音频/视频/未知编码
f = open('a.txt',mode='wb')
# f.write('你好') # wb打开文件,则write传入的是二进制,但‘你好’是字符串不是二进制,需要转换后再写入。
# 1. 把要写入的字符串转换成二进制
data = "我好困"
content = data.encode('utf-8') # 将字符串按照utf-8编码转换成二进制
# 2. 再将二进制写到文件中
f.write(content) # wb打开文件,则write传入的是 二进制
f.close()
注意:
- 写完后一定要记得关闭(close)文件,如果没关闭就相当于写的东西直接写到内存了。
- 关闭文件(close)就强制将内存刷到硬盘上了
3.3 其他操作
seek(光标字节位置),无论模式是否带b,都是按照字节进行处理。
# 读取字符串
obj = open('a.txt',mode='r',encoding='utf-8')
obj.seek(3) # 跳转到指定字节位置
data = obj.read()
obj.close()
print(data) # 读取字节
obj = open('a.txt',mode='rb')
obj.seek(3) # 跳转到指定字节位置
data = obj.read()
obj.close()
print(data)
tell(), 获取光标当前所在的字节位置
obj = open('a.txt',mode='rb')
# obj.seek(3) # 跳转到指定字节位置
obj.read()
data = obj.tell()
print(data)
obj.close()
flush,强制将内存中的数据写入到硬盘
v = open('a.txt',mode='a',encoding='utf-8')
while True:
val = input('请输入:')
v.write(val)
v.flush() v.close()
4. 关闭文件
文艺青年操作:
v = open('a.txt',mode='a',encoding='utf-8')
v.close()
二逼操作:
with open('a.txt',mode='a',encoding='utf-8') as v:
data = v.read()
# 缩进中的代码执行完毕后,自动关闭文件
5. 文件内容的修改
with open('a.txt',mode='r',encoding='utf-8') as f1:
data = f1.read()
new_data = data.replace('飞洒','666')
with open('a.txt',mode='w',encoding='utf-8') as f1:
data = f1.write(new_data)
大文件修改:
f1 = open('a.txt',mode='r',encoding='utf-8')
f2 = open('b.txt',mode='w',encoding='utf-8')
for line in f1:
new_line = line.replace('阿斯','死啊')
f2.write(new_line)
f1.close()
f2.close()
with open('a.txt',mode='r',encoding='utf-8') as f1, open('c.txt',mode='w',encoding='utf-8') as f2:
for line in f1:
new_line = line.replace('阿斯', '死啊')
f2.write(new_line)
python day08 文件操作的更多相关文章
- 员工管理系统+字符编码+Python代码文件操作
员工管理系统+字符编码+Python代码文件操作 1.员工管理系统 1.1 debug 代码调试 1.先使用鼠标左键在需要调试的代码左边点击一下(会出现一个红点)2.之后右键点击debug运行代码 ...
- Python :open文件操作,配合read()使用!
python:open/文件操作 open/文件操作f=open('/tmp/hello','w') #open(路径+文件名,读写模式) 如何打开文件 handle=open(file_name,a ...
- Python 常见文件操作的函数示例(转)
转自:http://www.cnblogs.com/txw1958/archive/2012/03/08/2385540.html # -*-coding:utf8 -*- ''''' Python常 ...
- 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容
孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...
- 孤荷凌寒自学python第三十三天python的文件操作初识
孤荷凌寒自学python第三十三天python的文件操作初识 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天开始自学python的普通 文件操作部分的内容. 一.python的文件打开 ...
- python中文件操作的六种模式及对文件某一行进行修改的方法
一.python中文件操作的六种模式分为:r,w,a,r+,w+,a+ r叫做只读模式,只可以读取,不可以写入 w叫做写入模式,只可以写入,不可以读取 a叫做追加写入模式,只可以在末尾追加内容,不可以 ...
- python中文件操作的其他方法
前面介绍过Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open('poems','r', ...
- Python常见文件操作的函数示例
# -*-coding:utf8 -*- ''''' Python常见文件操作示例 os.path 模块中的路径名访问函数 分隔 basename() 去掉目录路径, 返回文件名 dirname() ...
- python的文件操作及简单的用例
一.python的文件操作介绍 1.文件操作函数介绍 open() 打开一个文件 语法:open(file, mode='r', buffering=-1, encoding=None, errors ...
随机推荐
- ThinkPHP3.2 中空方法、空控制器和空模块的设置
ThinkPHP3.2 中空方法.空控制器和空模块的设置 1.空方法设置 问题: 当你访问一个不存在的方法的时候: 如: http://localhost/test/index.php/Home/Us ...
- 使用 FFMPEG 命令为视频嵌入字幕
有些电影的视频与字幕是分离的,如果在视频中嵌入字幕,那么观看起来会更方便一些,不必在播放前额外去加载字幕文件. 在 Linux 中,可以使用 ffmpeg 命令实现上述功能. ffmpeg -i in ...
- win10 solidity开发环境搭建
1. 软件安装 1) 安装nodejs 安装完成后将node.exe所在路径加入环境变量PATH中,以便在cmd命令行中直接使用node和npm命令 下面的操作在git bash下进行 2) 安装so ...
- C# 6.0:在catch和finally中使用await
Asyn方法是一个现在很常用的方法,当使用async和await时,你或许曾有这样的经历,就是你想要在catch块或finally块中使用它们,比如当出现一个exception而你希望将日志记在文件或 ...
- 通过c++11的condition_variable实现的有最大缓存限制的队列
之前曾写过一个通过C++11的condition_variable实现的有最大缓存限制的队列,底层使用std::queue来实现,如果想要提升性能的话,可以考虑改用固定的长度环形数组.环形数组实现如下 ...
- mybatis关于ORM的使用以及设计(一)[ORM的初始化]
ORM WIKI中的解释.画重点 Object-relational mapping (ORM, O/RM, and O/R mapping tool) in computer science is ...
- Linux基础之常用命令整理(二)
Linux系统启动流程 bios(找到启动介质) --> mbr(找到boot loader 512B 446引导信息 64分区信息 2 标志位 ) -->grub(选择操作系统或者内核 ...
- 事务回滚 SET XACT_ABORT ON
USE tempdb IF OBJECT_ID ('dbo.test') IS NOT NULL DROP TABLE dbo.test GO CREATE TABLE dbo.test ( id I ...
- 通过JS 给这个input加一个事件 获得焦点,回车事件绑定
通过JS 给这个input加一个事件 就是获得焦点就行了 window.onload = function(){ var oInput = document.getElementById(" ...
- flutter 访问网页+http请求
一.目录 1.访问网页 2.http请求 -----------------------------这是分割线----------------------------- 1.访问网页 基于url_la ...