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编程时利用wxPython来支持多线程的方法
Apr 07 Python
八大排序算法的Python实现
Jan 28 Python
Python入门教程之运算符与控制流
Aug 17 Python
python将ansible配置转为json格式实例代码
May 15 Python
详解Python实现多进程异步事件驱动引擎
Aug 25 Python
Python基于回溯法子集树模板解决数字组合问题实例
Sep 02 Python
python常用运维脚本实例小结
Feb 14 Python
Django单元测试中Fixtures用法详解
Feb 25 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 Python
python实现移动木板小游戏
Oct 09 Python
python 简单的调用有道翻译
Nov 25 Python
python中numpy.empty()函数实例讲解
Feb 05 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
yii操作session实例简介
2014/07/31 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
地震发生中逃生十大法则
2008/05/12 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
JS截取url中问号后面参数的值信息
2014/04/29 Javascript
jQuery选择器源码解读(三):tokenize方法
2015/03/31 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
老生常谈Bootstrap媒体对象
2017/07/06 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
js+canvas实现两张图片合并成一张图片的方法
2019/11/01 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
Vue实现简单购物车功能
2020/12/13 Vue.js
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
Python 初始化多维数组代码
2008/09/06 Python
python调用java的Webservice示例
2014/03/10 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
基于Python开发chrome插件的方法分析
2018/07/07 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
Python 安装 virturalenv 虚拟环境的教程详解
2020/02/21 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
2020/03/08 Python
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
医院护士专业个人的求职信
2013/12/09 职场文书
九年级体育教学反思
2014/01/23 职场文书
小学生作文评语
2014/04/18 职场文书
中药学自荐信
2014/06/15 职场文书
医院合作协议书
2014/08/19 职场文书
秋季校运会广播稿100字
2014/09/18 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
房地产项目合作意向书
2015/05/08 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL