文件操作

文件操作的流程

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()命令在直接放入文件中。


文件操作的具体方法

readlinereadlines方法

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相关推荐

  1. 小猪的Python学习之旅 —— 13.文字识别库pytesseract初体验

    小猪的Python学习之旅 -- 13.文字识别库pytesseract初体验 标签:Python 引言 度过了短暂的春节假期,又要开始继续搬砖了,因为还处于节后 综合征,各种散漫,不想看任何代码相关 ...

  2. [Python学习日记] 文件与文件系统(一)

    [Python学习日记] 文件与文件系统(一) 目录 Python3 File(文件) 方法 open() 方法 file 对象 目录 Python3 File(文件) 方法 open() 方法 Py ...

  3. python学习之文件处理

    Table of Contents 图片成批resize 多个文件夹中某文件,都保存到另一文件夹中 多个文件夹中某文件,都保存到另一文件夹中,并重命名 多个文件夹中,1/4数据用做测试集,其它用作训练 ...

  4. Python学习之==文件操作

    1.打开文件的模式 1 r,只读模式(默认)[不可写:文件不存在,会报错] 2 w,只写模式[不可读:不存在则创建:存在则删除内容] 3 a,追加模式[不可读:不存在则创建:存在则追加内容] 4 r+ ...

  5. Python学习笔记--文件操作

    (一)文件的编码 1. 编码 编码是一种规则集合,记录了内容和二进制间进行相互转换的逻辑 编码有许多种,最常用的是utf-8 2. 使用编码的原因 计算机只能识别二进制数,因此要将文件的内容翻译为二进 ...

  6. python学习之文件

    文件 作者 :cxw 摘要 :文件 目录 从文件中读取数据 1.读取一个文本文件的内容, 重新设置这些数据的格式并将其写入文件, 让浏览器能够显示这些内容. 2.要使用文本文件中的信息,首先需要将信息 ...

  7. Python学习笔记——文件写入和读取

    1.文件写入 #coding:utf-8 #!/usr/bin/env python 'makeTextPyhton.py -- create text file'import os ls = os. ...

  8. python学习_22(文件)

    1 写一个函数,实现遍历一个数字和字母参杂的字符串,如果碰到字母则替换成,最后隔开的数字作为整体计算求和. 如"ab34aa243dd78eww89",则替换成的结果为:" ...

  9. Python学习:文件操作

    一.打开文件 1.格式 在python,使⽤open函数,可以打开⼀个已经存在的⽂件,或者创建⼀个新⽂件,语法如下: open(name, mode) name:是要打开的⽬标⽂件名的字符串(可以包含 ...

最新文章

  1. 迁移学习——Domain Adaptation
  2. 成功解决Error while trying to retrieve text for error ORA-12154
  3. SAP主数据与业务数据的一致性问题
  4. 重磅 | 20+技术大咖齐聚 阿里云数据库创新上云峰会进入一周倒计时
  5. Java黑皮书课后题第8章:8.9(井字游戏)玩家使用各自标志标记3*3网格中的某个空格,当一个玩家在网格的水平、垂直或对角线方向标记了三个相同的标记时,游戏结束,该玩家获胜。创建一个玩井字游戏的程序
  6. [知识图谱构建] 一.Neo4j图数据库安装初识及药材供应图谱实例
  7. 【android】系统属性=(属性服务,属性文件,白名单)
  8. no.6 _扔鸡蛋问题
  9. LeetCode 500. Keyboard Row
  10. 【codevs1869】硬币购物,背包+神奇的容斥原理
  11. 结对编程其实可以变变?
  12. 第七篇,LQR、MPC工程化总结
  13. 从石器时代到硅器时代
  14. 程序员为什么要学算法?
  15. Nginx配置文件中文详解
  16. trinity运行原理及常见报错(一)
  17. using 用法拾忆
  18. 我的操作系统探索之路----------------进程篇(1)
  19. Halcon图像采集助手提示找不到指定DLL文件
  20. Android简易登录界面

热门文章

  1. bluehost中国和bluehost美国的区别?应该选择哪个?
  2. 如何用python修改pdf内容_如何利用python将pdf文件转化为txt文件?
  3. 宝塔linux取消登录,宝塔面板如何关闭安全入口
  4. Quartus联合modelsim的ip核仿真——以FIFO为例——(报错问题解决)
  5. 链接提交提示安全验证,网站辅助快排不行了吗?
  6. TensorFlow 如何在上次模型训练结果之上继续训练
  7. Codeforces Round #727 (Div. 2) B. Love Song
  8. 【番杰的小技巧笔记】查看windows许可证到期时间
  9. 有哪些好的编程习惯从一开始就值得坚持?
  10. iphone铃声android铃声,iphone12如何设置铃声?iphone12更换铃声方式分享[多图]