Python基础【day03】:文件操作(六)
一、概述
我们工作中需要经常操作文件,下面就讲讲如何用Python操作文件
1、文件操作的流程:
- 打开文件,得到文件句柄赋值给一个变量
- 通过文件句柄,对文件进行操作
- 关闭文件
二、入门
1、语法
open(文件路径,模式,字符编码)
|
1
2
3
4
5
6
7
8
|
#获取文件句柄f = open("yesterday","r",encoding="utf-8")#读取数据data = f.read()#打印读取的文件print(data)#关闭文件f.close() |
注: f 又叫文件句柄,它包含文件的文件名、文件的字符集、文件的大小、文件在硬盘上的起始位置
2、两次读取文件内容
读取内容:
|
1
2
3
4
|
Somehow, it seems the love I knew was always the most destructive kind不知为何,我经历的爱情总是最具毁灭性的的那种Yesterday when I was young昨日当我年少轻狂 |
代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
f = open("yesterday2","r",encoding="utf-8")#第1次读取data = f.read()#第2次读取data2 = f.read()print(data)print("----------------data2-----%s----"%(data2))f.close()#输出结果Somehow, it seems the love I knew was always the most destructive kind不知为何,我经历的爱情总是最具毁灭性的的那种Yesterday when I was young昨日当我年少轻狂----------------data2--------- |
这边不经意间有一个小疑问:为什么data2的数据为空?
因为在文件中 ,维护一个类似文件指针的一个东西,这个文件指针类似于我们平时操作文件时的光标的东西,所以当第1次读文件时,文件指针已经指向最后一个位置,所以第2次再去读取的时候,是从最后一个位置开始读取的,所以读取的为空。
那怎么再重新读取数据呐?把光标移动到开始位即可。
3、高效读取文件行
首先我们介绍一下readline和readlines
①readline()
读取一行文件
|
1
2
3
4
5
|
f = open("yesterday","r",encoding="utf-8")print(f.readline())f.close()#输出Somehow, it seems the love I knew was always the most destructive kind |
②readlines()
把文件中的每一行作为一个元素形成一个列表
|
1
2
3
4
5
6
|
f = open("yesterday2","r",encoding="utf-8")print(f.readlines())f.close()#输出['Somehow, it seems the love I knew was always the most destructive kind\n', '不知为何,我经历的爱情总是最具毁灭性的的那种\n','Yesterday when I was young\n', '昨日当我年少轻狂'] |
我们正常循环读取文件中的每一行,如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
f = open("yesterday2","r",encoding="utf-8")for index,line in enumerate(f.readlines()): #当下标值为2时,不打印 if index == 2: print("--------data--------") continue print(line.strip())f.close()#输出Somehow, it seems the love I knew was always the most destructive kind不知为何,我经历的爱情总是最具毁灭性的的那种--------data--------昨日当我年少轻狂 |
这种方法已经达到我们的目的了,可以顺利的读取每一行,但是,当我们遇到2G,20G,甚至200G的文件时,你这样读取会导致内存不够用,会使程序变的很慢,因为你的内存只有几个G,你把几十个G的数据放到内存,内存肯定是受不了的,所以这种方法只适合小文件,不适合大文件。那怎么办呢?我们于是就有下面这种方法,如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
f = open("yesterday2",'r',encoding='utf-8')#计数器count = 0#f文件变成迭代器for line in f: if count == 2: print("------data-----") count += 1 continue print(line.strip()) count += 1f.close()#输出结果Somehow, it seems the love I knew was always the most destructive kind不知为何,我经历的爱情总是最具毁灭性的的那种------data-----昨日当我年少轻狂 |
以上这种写法的好处在于,读取文件时,是一行一行的读取,而且,读取一行删除一行,内存中只保留一行。原因:f文件变成迭代器,它已经不再是一个列表的形式了,不能通过下标值来获取,需要一个计数器来计数。
三、基本操作
文件的基本操作,这边我需要另写一遍博客出来,因为我怕本篇博客写的太多,搞混乱了。
四、with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
|
1
2
3
|
with open('log','r') as f:.... |
如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:
|
1
2
|
with open('log1') as obj1, open('log2') as obj2: pass |
上面打开多个文件会导致一行代码过长,python官方建议,一行代码不超过80个字符,所以打开多个文件建议以下写法:
|
1
2
3
|
with open('log1') as obj1, \ open('log2') as obj2: pass |
五、文件修改
1、在以后的工作中有时候会用到修改某个文件的内容,所以下面我们就讲讲,如何修改文件
修改文件,是先读文件,一边读和操作,再一边写(写需要命令一个新的文件,成功后,把老的文件删掉,把新文件重新命名成老文件)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#读老文件f = open("yesterday","r",encoding="utf-8")#写入新文件f_new = open("yesterday_new",'w',encoding="utf-8")for line in f: #一边读新文件,修改内容 if "肆意的快乐等我享受" in line: line = line.replace("肆意的快乐等我享受","肆意的快乐等luoahong享受") #一边写入新文件 f_new.write(line)#关闭文件f.close()f_new.close() |
测试内容如下:
yesterday文件:
So many lovely songs were waiting to be sung
有那么多甜美的曲儿等我歌唱
So many wild pleasures lay in store for me
有那么多肆意的快乐等我享受
And so much pain my eyes refused to see
还有那么多痛苦 我的双眼却视而不见
yesterday_new文件:
So many lovely songs were waiting to be sung
有那么多甜美的曲儿等我歌唱
So many wild pleasures lay in store for me
有那么多肆意的快乐等luoahong享受
And so much pain my eyes refused to see
还有那么多痛苦 我的双眼却视而不见
Python基础【day03】:文件操作(六)的更多相关文章
- python基础篇(文件操作)
Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...
- Day3 Python基础学习——文件操作、函数
一.文件操作 1.对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过文件句柄对文件进行操作 关闭文件 #打开文件,读写文件,关闭文件 http://www.cnblogs.com/linha ...
- Python基础学习——文件操作、函数
一.文件操作 文件操作链接:http://www.cnblogs.com/linhaifeng/articles/5984922.html(更多内容见此链接) 一.对文件操作流程 打开文件,得到文件句 ...
- python基础之文件操作
对于文件操作中最简单的操作就是使用print函数将文件输出到屏幕中,但是这种操作并不能是文件保存到磁盘中去,如果下调用该数据还的重新输入等. 而在python中提供了必要的函数和方法进行默认情况下的文 ...
- python基础14_文件操作
文件操作,通常是打开,读,写,追加等.主要涉及 编码 的问题. #!/usr/bin/env python # coding:utf-8 ## open实际上是从OS请求,得到文件句柄 f = ope ...
- 【python基础】文件操作
文件操作目录 一 .文件操作 二 .打开文件的模式 三 .操作文件的方法 四 .文件内光标移动 五. 文件的修改 一.文件操作介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用pyt ...
- python基础4文件操作
在磁盘上读取文件的 功能都是由操作系统来实现的,不允许普通的程序直接操作磁盘,所以读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据( ...
- Python基础 之 文件操作
文件操作 一.路径 文件绝对路径:d:\python.txt 文件相对路径:在IDEA左边的文件夹中 二.编码方式 utf-8 gbk... 三.操作方式 1.只读 r 和 rb 绝对路径的打开操作 ...
- Python基础--基本文件操作
全部的编程语言都一样,学完了一些自带的数据机构后,就要操作文件了. 文件操作才是实战中的王道. 所以,今天就来分享一下Python中关于文件的一些基本操作. open方法 文件模式 这个模式对于写入文 ...
- python基础(10):文件操作
1. 初识文件操作 使⽤python来读写⽂件是非常简单的操作.我们使⽤open()函数来打开⼀个⽂件,获取到⽂ 件句柄,然后通过⽂件句柄就可以进⾏各种各样的操作了,根据打开⽅式的不同能够执⾏的操 作 ...
随机推荐
- unity物理检测的几种方式
(由于本人大多做2d游戏,因此以下以2d为主介绍,但是具体和3d相差不大) 在unity中有很多不同的物理检测方式,但是大致可以分为以下几种: 1.Physics2d检测系列 Physics2d.Li ...
- 212. Space Replacement【LintCode by java】
Description Write a method to replace all spaces in a string with %20. The string is given in a char ...
- Scrum Meeting NO.2
Scrum Meeting No.2 1.会议内容 今天,我们对已经确定的任务进行了分配,并针对界面设计方面的细节进行讨论. 由于这周其它课程任务繁重(编译+数据库).前端的任务主要分配给编程能力较好 ...
- Linux内核分析 笔记二 操作系统是如何工作的 ——by王玥
一.知识要点 1.计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算 ...
- 软件工程团队项目第一次Sprint评审
第一组:9-652 作品:炸弹人 评价:已经完成了界面的设计和基本功能,游戏已初具雏形.这款游戏可玩性很强,是个很不错的项目.但是对游戏并没有进行深入开发,不能持续的吸引玩家的兴趣,容易引起玩家的厌倦 ...
- 第四篇——Spring音乐登录界面设计及实现(C#)
Spring音乐播放器,我们小组设计其启动时有一个登录界面,用户初次可以注册,输入用户名和密码,点击注册即将输入信息保存到register文本文件中:如果已有用户名,输入用户名和密码,点击登录,程序会 ...
- 第二个spring冲刺第5天
针对与昨天的讨论内容,今天进行了开会研讨给意见. 在今天中有了点进展,各方面都有改善,离程序的完成度又前进了一大步.
- 单片机pc指针
单片机的PC是指程序计数器(Program Counter).程序计数器PC用于存放下一条将要执行的指令地址,是一个16位专用寄存器,不能通过MOV指令来操作,对用户来说是不可见的.当执行一条指令时, ...
- Alpha冲刺-第一天
1.1 今日完成任务情况以及遇到的问题. 完成任务情况 杜世康:弹幕的爬取 刘丹,李玉莹:系统统计功能实现 曹莹雯,尹楠: 主播管理功能实现 王静雅 :团队编码规范说明与本次博文撰写 遇到的问题 在爬 ...
- vue,react,angular本地配置nginx 环境单页面应用
一.起因:项目使用VUE,和react.构建单页面应用.在nginx的环境下只有一个index.html入口.这时候默认能够访问到vue,和react 路由 配置中的首页.内部连接也能够跳转但是不能给 ...