Learning-Python【9】:Python文件操作
1、什么是文件
文件是操作系统提供给用户或应用程序的一种虚拟单位,该虚拟单位直接映射的是硬盘空间。通俗点说,文件就是存放数据的地方
2、为何要处理文件
用户或应用程序直接操作文件(读/写)就被操作系统转换成具体的硬盘操作,从而实现将内存中的数据永久保存到硬盘中
3、使用文件
通常,我们使用电脑的时候,例如编写了一段代码,我们要把这段代码保存在硬盘上,方便下次使用。在Python中,要打开这个文件,需要三个步骤:
1)找出文件存放的路径,打开文件
2)对文件进行读写操作
3)关闭文件
说到找出文件的存放路径,就会引入相对路径和绝对路径的问题。在Windows中,相对路径指的是相对于当前执行文件所在的文件夹开始查找所需的文件,绝对路径是指从盘符开始直到这个文件的位置,写一个完整的路径。在Python中文件路径有两种表示方式,以我电脑上 python3.6.6 文件为例:
Python绝对路径写法:用双反斜线或者斜线区分层次
E:\\Python\\download\\python-3.6.6-amd64.exe
E:/Python/download/python-3.6.6-amd64.exe
Python相对路径写法:
如果我从download文件夹对这个文件操作,相对路径写为:python-3.6.6-amd64.exe
4、文件的打开模式
f = open(r'a.txt', mode='r', encoding='utf-8') # 打开文件
data = f.read() # 对文件进行读操作
f.close() # 关闭文件
r:只读模式,打开文件默认是只读模式,文件不存在打开会报错,如果文件存在文件指针跳到文件的开头
w:只写模式,文件不存在则创建,文件存在则覆盖
a:追加模式,文件不存在则创建,文件存在则不会覆盖,写内容会以追加的方式写(写日志文件的时候常用),追加模式是一种特殊的写模式
t:文本模式,只能针对文本文件,读写文件都是以字符串为单位的,必须指定 encoding 参数
b:二进制模式,文件以二进制的方式打开,读写文件都是以 bytes 为单位的,必须与上面的三种模式在一起使用,即rb,wb,ab,这种方式后面不用指定 encoding 参数
文件的打开还有一种方式,即上下文管理:
with open(r"a.txt", "rt", encoding = "utf-8") as f:
data=f.read()
这种方式无需手动关闭文件
5、文件的读写操作
read():对文件进行读操作,一次性读取全部文件内容
readline():每次读取一行
readlines():将每行内容作为列表元素,返回的是一个列表
readable():判断文件是否可读
write():对文件进行写操作
writelines():可以写一个序列,比如列表,会迭代写入文件(后面会学到迭代)
writeable():判断是否可写
6、文件内指针移动
大前提:文件内指针的移动是以字节Bytes为单位的,唯独 t 模式下的 read 读取内容是以字符为单位
# a.txt文件里存放内容:
# 你好啊aaaa哈哈哈 with open("a.txt", "rt", encoding="utf-8") as f:
data = f.read(3)
print(data) # 输出:
# 你好啊 with open("a.txt", "rb") as f:
data = f.read(3)
print(data.decode("utf-8")) # 输出:
# 你
f.seek(指针移动的字节数, 模式控制): 控制文件指针的移动
模式控制:
0:默认的模式,该模式代表指针移动的字节数是以文件开头作为参照的
1:该模式代表指针移动的字节数是以当前所在的位置作为参照的
2:该模式代表指针移动的字节数是以文件末尾的位置作为参照的
强调:其中0模式可以在 t 或者 b 模式使用,而1和2模式只能在 b 模式下用
f.tell():查看文件指针当前距离文件开头的位置
0模式详解:指针移动的字节数以文件开头作为参照,要注意如果文件中有中文字符,光标移动一定是3的倍数
# a.txt文件中存放:
# 你好啊aaaa哈哈哈 with open("a.txt", "rt", encoding="utf-8") as f:
f.seek(9, 0)
print(f.tell())
print(f.read()) # 输出:
#
# aaaa哈哈哈
1模式详解:指针移动的字节数以当前指针所在位置作为参照
with open("a.txt", "rb") as f:
f.seek(3, 1)
print(f.tell())
f.seek(10, 1)
print(f.tell())
print(f.read().decode("utf-8")) # 输出:
#
#
# 哈哈哈
2模式详解:指针移动的字节数以文件的末尾位置作为参照
with open("a.txt", "rb") as f:
f.seek(-9, 2)
data = f.read()
print(data.decode("utf-8")) # 输出:
# 哈哈哈
小练习:向文件里不断地添加日志信息,将日志的最后一行打印输出到屏幕上,每次都能打印最新添加的信息
# exercise.py
with open("access.log", "rb") as f:
f.seek(0, 2)
while True:
line = f.readline()
if len(line) == 0:
continue
else:
print(line.decode("utf-8"), end="") # run.py
import time with open("access.log", "a+", encoding="utf-8") as f:
f.write("%s 下雨了\n" %time.strftime("%Y-%m-%d %X")) # 每运行一次 run.py,都会打印获取系统当前时间
# 运行:
# 2018-09-21 18:06:11 下雨了
# 2018-09-21 18:06:12 下雨了
# 2018-09-21 18:06:13 下雨了
7、文件修改
1)硬盘空间无法修改,硬盘中的数据更新都是用新的内容覆盖旧的内容,内存控制可以修改
2)文件对应的是硬盘空间,硬盘不能修改,即文件本质也是不能修改的,但是我们看到的文件内容可以修改,这是把硬盘中的文件内容读入内存,然后在内存中修改完毕后再覆盖回硬盘
有两种实现方式:
1)将文件内容一次性全部读入内存,然后在内存中修改完毕后再覆盖写回原文件
优点:在文件修改过程中同一份数据只有一份,不会过多的占用硬盘空间
缺点:会过多地占用内存
# a.txt中存放的内容是:
# 你好啊aaaa哈哈哈 # 现在将aaaa改为bbbb with open("a.txt", "r", encoding="utf-8") as f:
data = f.read()
with open("a.txt", "w", encoding="utf-8") as f:
f.write(data.replace("aaaa", "bbbb")) # 运行:
# 你好啊bbbb哈哈哈
2)以读的方式打开原文件,以写的方式打开一个临时文件,将原文件一行一行读入内存,修改完后写入临时文件,然后再删除原文件,将临时文件重命名为原文件名
优点:不会占用过多的内存
缺点:在文件修改过程中同一份数据存了两份,硬盘空间不足将无法完成修改
# 现在a.txt里存放了内容是:
# 你好啊bbbb哈哈哈 # 将bbbb改为aaaa import os
with open("a.txt", "r", encoding="utf-8") as f1, \
open("a_temp.txt", "w", encoding="utf-8") as f2:
for line in f1:
f2.write(line.replace("bbbb", "aaaa")) os.remove("a.txt")
os.rename("a_temp.txt", "a.txt") # 运行:
# 你好啊aaaa哈哈哈
Learning-Python【9】:Python文件操作的更多相关文章
- python os&shutil 文件操作
python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...
- python 历险记(三)— python 的常用文件操作
目录 前言 文件 什么是文件? 如何在 python 中打开文件? python 文件对象有哪些属性? 如何读文件? read() readline() 如何写文件? 如何操作文件和目录? 强大的 o ...
- Python的高级文件操作(shutil模块)
Python的高级文件操作(shutil模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让我们用python的文件处理来进行文件拷贝,想必很多小伙伴的思路是:使用打开2个 ...
- Python入门篇-文件操作
Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...
- python基础篇(文件操作)
Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...
- Python之常用文件操作
Python之常用文件操作
- python学习之路-3 初始python数据类型以及文件操作
本篇涉及内容 set集合 函数 三元运算 文件操作 set集合 set是一个无序的且不重复的元素集合 1.创建set集合的方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- Python开发【第三篇】:Python基本之文件操作
Python基本之文本操作 一.初识文本的基本操作 在python中打开文件有两种方式,即:open(...) 和 file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open ...
- python基础之文件操作
对于文件操作中最简单的操作就是使用print函数将文件输出到屏幕中,但是这种操作并不能是文件保存到磁盘中去,如果下调用该数据还的重新输入等. 而在python中提供了必要的函数和方法进行默认情况下的文 ...
- 关于Python中的文件操作(转)
总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...
随机推荐
- 关于 ubuntu 下 防火墙 ufw的使用
ufw 是 iptables 的一个语法糖.详细介绍
- 判断网页请求与FTP请求
实例说明 在访问Internet网络时,经常涉及到很多访问协议,其中最明显.最常用的就是访问页面的http协议.访问ftp服务器的FTP协议等.
- JAVAMail邮件服务器
SMTP:simple mail transfer protocol(简单邮件传输协议),是internate传输mail的基本协议,也是TCP/IP协议组成员, POP3:邮局协议第三版,是inte ...
- springboot+mybatis+druid数据库连接池
参考博客https://blog.csdn.net/liuxiao723846/article/details/80456025 1.先在pom.xml中引入druid依赖包 <!-- 连接池 ...
- 图->有向无环图->拓扑排序
文字描述 关于有向无环图的基础定义: 一个无环的有向图称为有向无环图,简称DAG图(directed acycline graph).DAG图是一类较有向树更一般的特殊有向图. 举个例子说明有向无环图 ...
- luogu3978 [TJOI2015]概率论
题目链接:洛谷 题目大意:求所有$n$个点的有根二叉树的叶子节点数总和/$n$个点的有根二叉树的个数. 数据范围:$n\leq 10^9$ 生成函数神题!!!!(我只是来水博客的) 首先$n$个点的有 ...
- 16.4-uC/OS-III同步 (任务信号量)
信号量和消息队列均是单独的内核对象,是独立于任务存在的. 任务信号量 仅发布给一个特定任务 .任务消息队列 可以发布给多个任务. 任务信号量伴随任务存在,只要创建了任务,其任务信号量就是该任务的一个数 ...
- TCP/IP协议 模型
OSI的来源 OSI(Open System Interconnect),即开放式系统互联. 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型. ISO为了更好的 ...
- Ethzasl MSF源码阅读(1):程序入口和主题订阅
关于IMU融合知乎上的一篇问答:有哪些开源项目是关于单目+imu做slam的? Ethz的Stephen Weiss的工作,是一个IMU松耦合的方法. 1.程序入口:ethzasl_msf\msf_u ...
- jmeter二次开发之java请求
现在很多公司都用的是微服务,每个服务的请求协议有可能不相同,怎样用jmeter二次开发自己的java请求? 下面是具体的开发步骤: 1,把需要的jar包 添加到maven依赖中 jmeter中java ...