Python3.5文件读与写操作经典实例详解


Posted in Python onMay 01, 2019

本文实例讲述了Python3.5文件读与写操作。分享给大家供大家参考,具体如下:

1、文件操作的基本流程:

(1)打开文件,得到文件句柄并赋值给一个变量

(2)通过句柄对文件进行操作

(3)关闭文件

2、基本操作举例:

现有一个命名为song.txt的文件,里面存放最喜爱的英文歌,内容如下:

take me to your heart
hiding from the rain and snow
藏身于雨雪之中
trying to forget but i won't let go
努力忘记,但我怎能就这样离去
looking at a crowded street
看着熙熙攘攘的街道
listening to my own heart beat
却只能听见自己的心跳
so many people all around the world
这么多的人在世界上
tell me where do i find someone like you girl
请告诉我在哪里可以找到像你一样的女孩
take me to your heart take me to your soul
将我留存心间与你的灵魂相伴
give me your hand before i'm old
给我你的手,在我老去之前
show me what love is haven't got a clue
问情为何物在我们彼此离开前
show me that wonders can be true
问奇迹上演
they say nothing lasts forever
他们说没有什么可以天长地久
we're only here today
我们也能此时相守
love is now or never
现在或者永不回头
bring me far away
请带我一起远走
take me to your heart take me to your soul
让我靠近你的心与你的灵魂相伴
give me your hand and hold me
给我你的手拥我入怀
show me what love is be my guiding star
问情为何物让星辰照亮我路
it's easy take me to your heart
其实爱我真的很简单以

在另一个命名为file_operation.py的文件中编写代码,使得以“utf-8”的编码格式将文件song.txt打开,并且读取该文件,将读取的内容返回到一个变量lyric中并打印出来。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

lyric = open("song",encoding="utf-8").read()
print(lyric)

运行结果将song.txt文件的内容打印出来:截图部分如下

Python3.5文件读与写操作经典实例详解

3、文件基本操作

文件句柄:打开文件的返回值为文件句柄(文件的内存对象),对文件进行操作的是操作文件句柄。

(1)读文件内容

f = open("song",encoding="utf-8") #打开文件的返回值为文件句柄(文件的内存对象)
lyric = f.read() #读文件
print(lyric)  #打印读取内容

(2)写文件内容

f = open("song2",'w',encoding="utf-8") #w:只写模式。不存在的文件则创建;存在则覆盖原来文件的内容
f.write("Take me to your heart\n")
f.write("带我走进你的心")
f.close()

运行结果:

Python3.5文件读与写操作经典实例详解

(3)在文件后边追加内容

f = open("song2",'a',encoding="utf-8") #a:追加模式。不存在的文件则创建;存在只追加内容
f.write("\nTake me to your soul\n")
f.write("带我走进你的心灵")
f.close()

运行结果:

Python3.5文件读与写操作经典实例详解

(4)文件打开模式总结

.r,只读模式(默认)。
.w,只写模式。【不可读;不存在的文件则创建;存在则覆盖原来文件的内容】
.a,追加模式。【不可读;   不存在则创建;存在则只追加内容】

4、文件读操作

(1)文件读操作——读文件的第一行——调用:句柄.readline()

f = open("song",'r',encoding="utf-8")
first_line = f.readline() #读取第一行
print(first_line)

运行结果:

take me to your heart

(2)文件读操作——利用循环读取文件的前5行:

f = open("song",'r',encoding="utf-8")
for i in range(5):
 print(f.readline().strip())

运行结果:

take me to your heart
hiding from the rain and snow
藏身于雨雪之中
trying to forget but i won't let go
努力忘记,但我怎能就这样离去

句柄.readlines()将文件的内容以每行作为一个元素转换成一个列表

f = open("song",'r',encoding="utf-8")
print(f.readlines())

运行结果:

Python3.5文件读与写操作经典实例详解

(3)文件读操作——利用句柄.readlines()循环读取文件的内容:

f = open("song",'r',encoding="utf-8")
for line in f.readlines():
 print(line.strip())

运行结果:

Python3.5文件读与写操作经典实例详解

(4)文件读操作——利用句柄.readlines()循环读取文件的内容并处理特殊的行:

f = open("song",'r',encoding="utf-8")
for index,line in enumerate(f.readlines()):
 if index == 5:
  print("------------")
  continue
 print(line.strip())

运行结果:

Python3.5文件读与写操作经典实例详解

(5)高效读取文件:当文件的内容很大时,采用readlines的方式需要先把文件转换成列表,耗费时间太长,内存里装不下太大的文件。
采用遍历并打印句柄的方式可以高效的实现文件的读取,这种方式采用一行行读取文件方式,内存里面每次只保存一行

f = open("song",'r',encoding="utf-8")
for line in f:
 print(line.strip())

运行结果:

Python3.5文件读与写操作经典实例详解

(6)高效读取文件——处理特殊行

count = 0
f = open("song",'r',encoding="utf-8")
for line in f:
 if count == 3:
  print("-------------")
  count+=1
  continue
 print(line.strip())
 count += 1

Python3.5文件读与写操作经典实例详解

5、文件读完之后,文件句柄的指针移动到文件的末尾,想从头再读一遍,需要将指针移回到开始位置。

(1)查看文件句柄的指针指向的位置,调用.tell(),已读取的字符的个数即为计数的值(也是文件句柄指针指向的位置)

f = open("song",'r',encoding="utf-8")
print(f.tell())
print(f.readline().strip()) #读取第一行
print(f.tell())

运行结果:

 0
take me to your heart
23

f = open("song",'r',encoding="utf-8")
print(f.tell())
print(f.read(6)) #读取字符的个数
print(f.tell())

运行结果:

0
take m
6

(2)移动文件句柄指针,使其回到某个位置,调用.seek(指针的位置)

f = open("song",'r',encoding="utf-8")
print(f.tell())
print(f.readline().strip()) #读取第一行内容
print(f.tell())    #打印文件句柄指针的位置
f.seek(0)      #文件句柄指针回到起始位置
print(f.tell())
f.seek(30)     #文件句柄指针回到第30个字符的位置
print(f.readline().strip()) #从第30个字符开始读一行内容
print(f.tell())    #打印读取之后指针的位置

运行结果:

0
take me to your heart
23
0
from the rain and snow
54

6、打印文件的编码类型——调用:句柄.encoding()

f = open("song",'r',encoding="utf-8")
print(f.encoding)    #打印文件的编码类型

运行结果:

utf-8

7、打印文件的名字——调用:句柄.name

f = open("song",'r',encoding="utf-8")
print(f.name)    #打印文件名字

运行结果:

song

8、判断文件是否可读——调用:句柄.readable()

    判断文件是否可写——调用:句柄.writable()

   判断文件是否已经关闭——调用:句柄.closed()

    判断文件句柄指针是否可移动——调用:句柄.seekable(),tty文件和终端设备文件的句柄指针不能移动

f = open("song",'r',encoding="utf-8")
print(f.readable()) #判断文件是否可读
print(f.seekable()) #判断文件句柄指针是否可移动
print(f.writable()) #判断文件是否可写

运行结果:

True
True
False

9、以写的模式打开一个文件,刚写完一行,突然断电,写的内容就没有写入硬盘当中,而是在内存的缓存中(硬盘的速度比内存慢)。
原本等到写入的内容在内存的缓存中满了,再一起写入硬盘中,调用句柄.flush()表示强制刷新到硬盘里面

举例:动态打印字符:每隔0.1秒在屏幕输出打印一个#,一个打印20个

import sys,time

for i in range(20):
 sys.stdout.write("#") #向屏幕标准输出写入的字符
 sys.stdout.flush()  #强制刷新
 time.sleep(0.1)   #休眠时间

运行结果

####################

10、截断文件里面的内容——调用:句柄.truncate()   没有写参数,不做任何操作

调用:句柄.truncate(10)    参数10,代表从文件开头,截断10个字符

f = open("song",'a',encoding="utf-8")
f.truncate(20)    #从起始位置截断20个字符

Python3.5文件读与写操作经典实例详解

11、"+" 表示可以同时读写某个文件

(1)r+   读写模式,注:写的内容从文件的最后面开始写入(写等同于追加),即:【可读;可写;可追加】

f = open("song",'r+',encoding="utf-8") #r+表示读写模式
for line in range(3):
 print(f.readline().strip())
f.write("-----------")

运行结果:

Python3.5文件读与写操作经典实例详解Python3.5文件读与写操作经典实例详解

(2)w+   写读模式(应用不多):先创建一个文件然后再向里面写内容,注:写的内容从文件的最后面开始写入(写等同于追加)

f = open("song",'w+',encoding="utf-8")
f.write("-----------\n")
f.write("-----------\n")
f.write("-----------\n")

print(f.readline())
f.seek(14)
f.write("==========")
print(f.readline())
f.close()

运行结果:

Python3.5文件读与写操作经典实例详解Python3.5文件读与写操作经典实例详解

(3).a+   追加读模式

12、"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

应用:在网络传输只能用二进制模式进行传输;所有的二进制文件(如:视频)用二进制模式。

(1)二进制文件——读

f = open("song",'rb') #"b"表示处理二进制文件
for line in range(3):
 print(f.readline())

运行结果:

Python3.5文件读与写操作经典实例详解

(2)二进制文件——写

f = open("song",'wb') #"b"表示处理二进制文件--写
f.write("Hello World\n".encode()) #需要将字符串编码成字节包(二进制格式)才能够写入
f.close()

运行结果:

Python3.5文件读与写操作经典实例详解

13、"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

(1)rU
(2)r+U

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
使用Python实现简单的服务器功能
Aug 25 Python
Python实现的直接插入排序算法示例
Apr 29 Python
flask中的wtforms使用方法
Jul 21 Python
python使用tornado实现简单爬虫
Jul 28 Python
浅谈Python中函数的定义及其调用方法
Jul 19 Python
python列表推导式操作解析
Nov 26 Python
python 实现单通道转3通道
Dec 03 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
200行python代码实现贪吃蛇游戏
Apr 24 Python
golang中的空接口使用详解
Mar 30 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 Python
python 判断文件或文件夹是否存在
Mar 18 Python
Python3.5集合及其常见运算实例详解
May 01 #Python
Django给admin添加Action的步骤详解
May 01 #Python
Django重置migrations文件的方法步骤
May 01 #Python
OpenCV-Python 摄像头实时检测人脸代码实例
Apr 30 #Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 #Python
python通过paramiko复制远程文件及文件目录到本地
Apr 30 #Python
python实现定时压缩指定文件夹发送邮件
Dec 22 #Python
You might like
PHP语法速查表
2006/12/06 PHP
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
用JSON做数据传输格式中的一些问题总结
2011/12/21 Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
2015/10/06 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
2020/02/11 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
Vue 实现拨打电话操作
2020/11/16 Javascript
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
python字符串替换示例
2014/04/24 Python
Python之os操作方法(详解)
2017/06/15 Python
Python实现的弹球小游戏示例
2017/08/01 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
女儿十岁生日答谢词
2014/01/27 职场文书
办公室员工岗位工作职责
2014/03/10 职场文书
防灾减灾标语
2014/10/07 职场文书
购房委托书
2014/10/15 职场文书
鲁迅故居导游词
2015/02/05 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
六一活动主持词
2015/06/30 职场文书
运动会5000米加油稿
2015/07/21 职场文书