PythonDay08
第八章
今日内容
文件操作
读操作
写操作
+操作
其他操作
读操作
r模式
f = open('test.txt', mode='r', encoding='utf-8')
print(f.read())
f.close()
with open('test.txt', 'r', encoding='utf-8')as f:
print(f.read()) # 两种方式获得文件句柄,推荐with,运行完之后自动关闭文件
rb模式
with open('test.txt', 'rb', encoding='utf-8')as f:
print(f.read())
# 读出来的是字节
建议使用相对路径
读操作
f.read() # 不建议用
f.read(读取的字符数)
f.readline() # 每次读取一行,每行最后有一个\n
f.readlines() # 将每一行形成一个元素,并添加到一个列表中,当文件过大时,内存会崩
推荐使用,先拿到文件句柄
with open('1','r',encoding='utf-8')as f:
for i in f:
print(i)
写操作
使用w模式的时候,在打开文件的时候就就会把文件中的所有内容都清空,然后在操作
如果文件不存在使用w模式会创建文件,文件存在w模式是覆盖写,在打开文件时会把文件中所有的内容清空.
f.write()
wb模式下,不可以指定打开文件的编辑,但是写文件的时候必须将字符串转换成utf-8的bytes数据
追加
只要是a或者ab,a+都是在文件的末尾写入,不论光标在任何位置.
在追加模式下,我们写入的内容后追加在文件的末尾
a模式如果文件不存在就会创建一个新文件
ab模式和上面一样,没有太大区别
# 面试题:
# 当文件较大时,使用for循环进行读取
# f = open('t1',mode="r",encoding="utf-8")
# for i in f:
# print(i.strip())
r+模式
r+模式一定要记住是先读后写
f1 = open('test.txt',mode='r+',encoding='utf-8')
msg = f1.read()
f1.write('千山鸟飞绝,万径人踪灭')
f1.flush()
f1.close()
print(msg)
结果:
正常的读取之后,写在结尾
深坑请注意: 在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显示的是多少. 再写入 或者操作文件的时候都是在结尾进行的操作.
w+模式
先将所有的内容清空,然后写入.最后读取.但是读取的内容是空的,不常用
a+模式
a+模式下,不论是先读还是后读,都是读不到数据的
其他操作
seek()
seek(n)光标移动到n位置,注意: 移动单位是byte,所有如果是utf-8的中文部分要是3的倍数
通常我们使用seek都是移动到开头或者结尾
移动到开头:seek(0,0) 可以看做成seek(0)
seek(6)这种如果是单数并且不是0的就是按照字节来移动光标
移动到结尾:seek(0,2) seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾
tell()
使用tell()可以帮我们获取当前光标在什么位置
文件修改
文件修改: 只能将文件中的内容读取到内存中, 将信息修改完毕, 然后将源文件删除, 将新文件的名字改成老文件的名字
错误示范,使用read,当文件内容过大,会导致内存溢出
import os
with open("../path1/小娃娃", mode="r", encoding="utf-8") as f1,\
open("../path1/小娃娃_new", mode="w", encoding="UTF-8") as f2:
content = f1.read()
new_content = content.replace("冰糖葫芦", "⼤白梨")
f2.write(new_content)
os.remove("../path1/小娃娃") # 删除源文件
os.rename("../path1/小娃娃_new", "小娃娃") # 重命名新文件
弊端: ⼀次将所有内容进行读取. 内存溢出. 解决方案: 一行一行的读取和操作 正确代码:
import os
with open("小娃娃", mode="r", encoding="utf-8") as f1,\
open("小娃娃_new", mode="w", encoding="UTF-8") as f2:
for line in f1:
new_line = line.replace("大白梨", "冰糖葫芦")
f2.write(new_line)
os.remove("小娃娃") # 删除源⽂文件
os.rename("小娃娃_new", "小娃娃") # 重命名新文件
PythonDay08的更多相关文章
- Python--day08(文件操作)
昨天内容回顾 1. 数据类型转换 1. 数字类型:数字类型之间可以直接 类型()进行直接转换 2. str与int类型:int() 与str() 之间在某些条件下可以直接转换 int('10' ...
随机推荐
- 详解GSM的基带跳频和射频跳频
跳频技术源于军事通信,目的是为了获得较好的保密性和抗干扰能力.跳频分为快速和慢速两种,GSM中的跳频属于慢跳频. 跳频方式从时域概念上分为帧跳频和时隙跳频,从载频实现方式上分为射频跳频和基带跳频. 帧 ...
- 利用aspose-words直接将Word转化为图片
之前遇到一个需求,需要在word文档中加入一些文字,并转化为图片.之前也试过几种方案,但是发现效果还不是很理想,且中间需要经过一次转化为pdf的过程,最近找到了最理想的方式,即利用aspose-wor ...
- python操作mysql,redis
import pymysqlip ="127.0.0.1"#数据库地址user = 'username'#数据库用户名password="pwd"#数据库密码d ...
- python 输出一个随机数
题目:输出一个随机数. 程序分析:使用 random 模块. #!/user/bin/env python #coding:utf-8 import random print random.rando ...
- scrapy项目3:爬取当当网中机器学习的数据及价格(spider类)
1.网页解析 当当网中,人工智能数据的首页url如下为http://category.dangdang.com/cp01.54.12.00.00.00.html 点击下方的链接,一次观察各个页面的ur ...
- Spring Boot教程(十一) springboot程序构建一个docker镜像
准备工作 环境: linux环境或mac,不要用windows jdk 8 maven 3.0 docker 对docker一无所知的看docker教程. 创建一个springboot工程 引入web ...
- DVWA--CSP Bypass
0x01看到标题,是否有点疑惑 CPS 是什么东东.简单介绍一下就是浏览器的安全策略,如果 标签,或者是服务器中返回 HTTP 头中有 Content-Security-Policy 标签 ,浏览器会 ...
- NOIP2018初赛划水记
尽管初赛好像没什么好写的,但还是以此作为我的第一篇游记吧. 前夜 本来以为初赛水(去年分数线36来着),几周前做了一套普及组的卷子90多分感觉良好就没管了(不明白那些专门花时间看初赛书的人),结果Mr ...
- [CSP-S模拟测试]:椎(线段树维护区间最值和单调栈)
题目描述 虽不能至,心向往之. $Treap=Tree+Heap$ 椎$=$树$+$堆 小$\pi$学习了计算机科学中的数据结构$Treap$. 小$\pi$知道$Treap$指的是一种树. 小$\p ...
- 异步实时搜索jquery select插件
异步实时搜索jquery select插件 一.先看看效果. 二.做此插件的原因. 1.数据量过大(几千.几万条),无法一次性全部加载. 2.现有插件各不相同,无法满足功能需求. 3.美观性,可控性不 ...