Python学习之文件13
文件操作
文件操作的流程
1. 建立文件对象:
2. 文件操作(读或者写)
3. 关闭文件
文件读操作
f = open('小重山','r',encoding = 'utf8')
'''获得文件对象,小重山为当前目录下的一个文件
'r'代表为读'''
data = f.read() #对文件进行读操作,读的内容放在data中#f.read(5) 读取5个字符
print(data)
f.close() #关闭文件
昨夜寒蛩不住鸣,
惊回千里梦,已三更。
起来独自绕阶行,
人悄悄,帘外月胧明。
白首为功名,旧山松竹老,阻归程,
欲将心事付瑶琴,
知音少,弦断有谁听。
文件写操作
f = open('小重山','w') #没有这个文件则创建这个文件#在创建对象时会将文件的内容清空 '''写状态下不可读 f.read() 错误'''f.write("hello world") #之前文件里面的内容已经全部被清空
f.write('alex') #之前写的hello world还在,之间无空格和换行
f.close()
'''打开一个文件就得关掉,否则不安全(虽然python在程序执行结束时会自动帮你关掉)'''
hello worldalex
#如果写的时候不希望清空文件里面的内容
f = open('小重山','a') #该打开文件的方式为追加模式,a = append
f.write('hello') #向文件的最后面写入hello
f.close()
昨夜寒蛩不住鸣。
惊回千里梦,已三更。
起来独自绕阶行。
人悄悄,帘外月胧明。
白首为功名,旧山松竹老,阻归程。
欲将心事付瑶琴。
知音少,弦断有谁听。
hello
文件是立即写到磁盘(文件)里面去的吗?
观察下面的程序:
import timef = open('小重山','a')
f.write('hello')
time.sleep(30)
f.close()
发现hello
并没有立即写入文件,而是程序结束(过了30s
)才写入文件的,那么在这30s
,'hello'
放在哪里?
其实'hello'
在这30s
内放在缓冲区,等到程序执行到f.close()
这个命令,程序才把'hello'
写入磁盘,由于有time.sleep(30)
这个命令,程序过了30s
才执行f.close()
,所以程序并没有立马把东西直接写入文件。
那么为什么不直接写入文件,而是放在缓冲区。原因就是磁盘很慢,想必大家都有体会,你打开一个大型软件会花很长的时间,想象一下,如果你进行大量文件操作时,计算机直接写入文件是很慢的,所以计算机先把东西放在缓冲区也就是在内存中,等到执行到f.close()
命令在直接放入文件中。
文件操作的具体方法
readline
和readlines
方法
readline()
一次读取一行
readlines()
直接读取所有行,形成一个列表,列表的一个元素为一行的内容
f = open('小重山','r')data = f.readline() #读取第一行的内容
print(data)
data = f.readline() #读取第二行的内容
print(data)
data = f.readlines() #读取所有行,得到一个列表,每个元素为每一行的内容
print(data)
昨夜寒蛩不住鸣。惊回千里梦,已三更。['起来独自绕阶行。\n', '人悄悄,帘外月胧明。\n', '白首为功名,旧山松竹老,阻归程。\n', '欲将心事付瑶琴。\n', '知音少,弦断有谁听。\n', 'hello']
tell()
和seek()
方法
tell()
是获取文件指针的位置
seek()
是设置文件指针的位置
f.read(4)
print(f.tell()) #tell已经读到哪里,默认从0开始,一个英文字符+1,中文+3,因为是utf-8编码f.seek(0) #设置从哪里开始读,0为从头开始读
flush()
方法
flush()
方法是将缓冲区里面的内容立即写入文件
f = open('小重山','r')
f.write('hello') #不会立即写入文件,而是放入缓冲区,等到close()之后写入文件
f.flush() #将缓冲区里面的内容写入文件,所以不需等到执行close()即可将hello写入文件
f.close()
其他打开文件的模式
之前介绍了3中打开文件的模式 ,'r':读、'w':写和'a':添加
下面介绍另外三种模式,是上面三种的进阶版:'r+'、'w+'、'a+'
r+
此模式为读写模式,既可读又可写,具体应用见下:
f = open('小重山','r+',encoding='utf8')
print(f.readline()) #读功能几乎相同,读取第一行
output:
昨夜寒蛩不住鸣。
f.write('haha') #向文件里面写入haha,此时会在文件的最后写入haha
此时文件里面的内容为:
昨夜寒蛩不住鸣。
惊回千里梦,已三更。
起来独自绕阶行。
人悄悄,帘外月胧明。
白首为功名,旧山松竹老,阻归程。
欲将心事付瑶琴。
知音少,弦断有谁听。haha
可以使用seek()
方法改变文件读取和写入的位置,如:
f = open('小重山','r+',encoding='utf8')
f.seek(0) #文件指针指向文件的开头
f.write('helloa') #写入文件helloa,因为一个中文在utf-8编码下为三个字符,所以前2个字被替换成了helloa
f.seek(12) #文件指向12,即第五个字
print(f.readline()) #读取并打印自12这个位置以后这一行的内容
f.close()
此时文件变为:
helloa寒蛩不住鸣。
惊回千里梦,已三更。
起来独自绕阶行。
人悄悄,帘外月胧明。
白首为功名,旧山松竹老,阻归程。
欲将心事付瑶琴。
知音少,弦断有谁听。而打印输出为:
不住鸣。
w+
此模式也可读可写,与w模式一样,在打开文件时会自动的将文件里面所包含的内容自动的删除
f = open('小重山','w+',encoding='utf8')
f.readline() #此时读入的为空行,因为此时文件为空
f.write('hello') #向文件中写入hello
f.readline() #此时读入的还是空行,因为此时文件的指针指向文件的最末尾
f.close()
此时文件内容已变为:
hello打印输出为(因为什么都没有读到,所以为空):
同样可以使用seek()方法,同上
a+
此模式为添加,并且可读,添加只能在尾部添加,不能随seek()
方法而改变,但是读受到seek()
方法的影响。
f = open('小重山','a+',encoding='utf8')
f.seek(3) #写是在最后写,但是这时读应该从第二个开始读
f.write('hello') #此时是在末尾添加
print(f.readline())#读取第一行
f.close()
此时文件内容为(写到最末尾):
昨夜寒蛩不住鸣。
惊回千里梦,已三更。
起来独自绕阶行。
人悄悄,帘外月胧明。
白首为功名,旧山松竹老,阻归程。
欲将心事付瑶琴。
知音少,弦断有谁听hello输出(从第二个开始读):
夜寒蛩不住鸣。
with
with
是为了防止忘了关闭文件对象而设置的,具体使用方法如下:
with open('小重山','r',encoding='utf8') as f:'''在这里可以进行文件的操作'''#退出with代码块后,会自动的将文件f关闭,所以不需要手动使用f.close()方法
用with
打开多个文件的用法:
with open('小重山','r',encoding='utf8') as f1, open('小重山2','w',encoding='utf8') as f2:'''文件操作'''
Python学习之文件13相关推荐
- 小猪的Python学习之旅 —— 13.文字识别库pytesseract初体验
小猪的Python学习之旅 -- 13.文字识别库pytesseract初体验 标签:Python 引言 度过了短暂的春节假期,又要开始继续搬砖了,因为还处于节后 综合征,各种散漫,不想看任何代码相关 ...
- [Python学习日记] 文件与文件系统(一)
[Python学习日记] 文件与文件系统(一) 目录 Python3 File(文件) 方法 open() 方法 file 对象 目录 Python3 File(文件) 方法 open() 方法 Py ...
- python学习之文件处理
Table of Contents 图片成批resize 多个文件夹中某文件,都保存到另一文件夹中 多个文件夹中某文件,都保存到另一文件夹中,并重命名 多个文件夹中,1/4数据用做测试集,其它用作训练 ...
- Python学习之==文件操作
1.打开文件的模式 1 r,只读模式(默认)[不可写:文件不存在,会报错] 2 w,只写模式[不可读:不存在则创建:存在则删除内容] 3 a,追加模式[不可读:不存在则创建:存在则追加内容] 4 r+ ...
- Python学习笔记--文件操作
(一)文件的编码 1. 编码 编码是一种规则集合,记录了内容和二进制间进行相互转换的逻辑 编码有许多种,最常用的是utf-8 2. 使用编码的原因 计算机只能识别二进制数,因此要将文件的内容翻译为二进 ...
- python学习之文件
文件 作者 :cxw 摘要 :文件 目录 从文件中读取数据 1.读取一个文本文件的内容, 重新设置这些数据的格式并将其写入文件, 让浏览器能够显示这些内容. 2.要使用文本文件中的信息,首先需要将信息 ...
- Python学习笔记——文件写入和读取
1.文件写入 #coding:utf-8 #!/usr/bin/env python 'makeTextPyhton.py -- create text file'import os ls = os. ...
- python学习_22(文件)
1 写一个函数,实现遍历一个数字和字母参杂的字符串,如果碰到字母则替换成,最后隔开的数字作为整体计算求和. 如"ab34aa243dd78eww89",则替换成的结果为:" ...
- Python学习:文件操作
一.打开文件 1.格式 在python,使⽤open函数,可以打开⼀个已经存在的⽂件,或者创建⼀个新⽂件,语法如下: open(name, mode) name:是要打开的⽬标⽂件名的字符串(可以包含 ...
最新文章
- 迁移学习——Domain Adaptation
- 成功解决Error while trying to retrieve text for error ORA-12154
- SAP主数据与业务数据的一致性问题
- 重磅 | 20+技术大咖齐聚 阿里云数据库创新上云峰会进入一周倒计时
- Java黑皮书课后题第8章:8.9(井字游戏)玩家使用各自标志标记3*3网格中的某个空格,当一个玩家在网格的水平、垂直或对角线方向标记了三个相同的标记时,游戏结束,该玩家获胜。创建一个玩井字游戏的程序
- [知识图谱构建] 一.Neo4j图数据库安装初识及药材供应图谱实例
- 【android】系统属性=(属性服务,属性文件,白名单)
- no.6 _扔鸡蛋问题
- LeetCode 500. Keyboard Row
- 【codevs1869】硬币购物,背包+神奇的容斥原理
- 结对编程其实可以变变?
- 第七篇,LQR、MPC工程化总结
- 从石器时代到硅器时代
- 程序员为什么要学算法?
- Nginx配置文件中文详解
- trinity运行原理及常见报错(一)
- using 用法拾忆
- 我的操作系统探索之路----------------进程篇(1)
- Halcon图像采集助手提示找不到指定DLL文件
- Android简易登录界面
热门文章
- bluehost中国和bluehost美国的区别?应该选择哪个?
- 如何用python修改pdf内容_如何利用python将pdf文件转化为txt文件?
- 宝塔linux取消登录,宝塔面板如何关闭安全入口
- Quartus联合modelsim的ip核仿真——以FIFO为例——(报错问题解决)
- 链接提交提示安全验证,网站辅助快排不行了吗?
- TensorFlow 如何在上次模型训练结果之上继续训练
- Codeforces Round #727 (Div. 2) B. Love Song
- 【番杰的小技巧笔记】查看windows许可证到期时间
- 有哪些好的编程习惯从一开始就值得坚持?
- iphone铃声android铃声,iphone12如何设置铃声?iphone12更换铃声方式分享[多图]