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 ...
随机推荐
- 关于 python中的转义字符
"abc\n" 前面加 r,表示原生输出,不转义.实际上是用 \代替 \\,其实是已经转义过了,并不是不转义. 看这个例子: print(r"abc \n") ...
- vue v-for的数组改变导致页面不渲染解决方法
直接在数组里,改变数组来达到重新渲染页面的目的, 需要用push等数组方法, 或者$set(),或者给数组重新赋值,来改变数组引用地址 而是直接索引= <body> <div id= ...
- 计算属性和监听,computed,watch
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 微信原始坐标转换成百度坐标 lat lng
如有帮到你记得结合我这篇博客里的方法.... http://www.cnblogs.com/zc290987034/p/8294988.html {:wx_jssdk_config("fal ...
- ssm项目中KindEditor的图片上传插件,浏览器兼容性问题
解决办法: 原因:使用@ResponseBody注解返回java对象,在浏览器中是Content-Type:application/json;charset=UTF-8 我们需要返回字符串(Strin ...
- python全栈开发 * 进程理论 进程创建 * 180724
一.进程理论 1.进程是资源分配的最小单位. 2.进程调度就是多个进程在操作系统的控制下被CPU执行,去享用计算机的资源. 先来先服务 短作业优先 时间片轮转 多级反馈队列 3.进程调度的过程是不能够 ...
- TX2-入门坑点-Ubuntu16.04任务栏消失
问题:安装cuda过程中出现任务栏消失,快捷键失效的现象. 解决方法:重装桌面无法解决,使用cssm无法解决,最后删除home目录下的 .cache文件夹重启后解决
- (二)juc线程高级特性——CountDownLatch / Callable / Lock
5. CountDownLatch 闭锁 Java 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能. CountDownLatch 一个同步辅助类, ...
- 7、LwIP协议规范翻译——网络接口
7.网络接口 在lwIP中,物理网络硬件设备驱动是由类似于BSD网络接口结构表示.网络接口结构如图5所示.网络接口被保存在一个全局的链表中,通过结构体中的next指针来完成链表的链接. 每个网络接口都 ...
- iis7下url重写后,已存在的html不能访问了(未能执行URL)的解决方法
iis7下url重写后,原本存在的html不能访问了,未能执行URL(asp.net对真正的.html(但不符合重写规的)就不知道如何处理了),遇到类似情况的朋友可以参考下 当把.html的url ...