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文件操作的更多相关文章

  1. python os&shutil 文件操作

    python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...

  2. python 历险记(三)— python 的常用文件操作

    目录 前言 文件 什么是文件? 如何在 python 中打开文件? python 文件对象有哪些属性? 如何读文件? read() readline() 如何写文件? 如何操作文件和目录? 强大的 o ...

  3. Python的高级文件操作(shutil模块)

    Python的高级文件操作(shutil模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让我们用python的文件处理来进行文件拷贝,想必很多小伙伴的思路是:使用打开2个 ...

  4. Python入门篇-文件操作

    Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...

  5. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  6. Python之常用文件操作

    Python之常用文件操作

  7. python学习之路-3 初始python数据类型以及文件操作

    本篇涉及内容 set集合 函数 三元运算 文件操作 set集合 set是一个无序的且不重复的元素集合 1.创建set集合的方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  8. Python开发【第三篇】:Python基本之文件操作

    Python基本之文本操作 一.初识文本的基本操作 在python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open ...

  9. python基础之文件操作

    对于文件操作中最简单的操作就是使用print函数将文件输出到屏幕中,但是这种操作并不能是文件保存到磁盘中去,如果下调用该数据还的重新输入等. 而在python中提供了必要的函数和方法进行默认情况下的文 ...

  10. 关于Python中的文件操作(转)

    总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...

随机推荐

  1. 10 windows server 2012R2 发布MVC框架网站注意事项

    1:网站编译完成之后,需要发布,网站中应包括的文件有:文件夹(bin,Views,Content等其他网站中涉及到的文件夹)文件(favicon.ico.Web.config.Global.asax) ...

  2. 静态方法(staticmethod)和类方法(classmethod)

    类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被类调用,就像正常调用函数一样 类方法和静态方法的相同点:都可以直接被类调用, ...

  3. 9 个用于移动APP开发的顶级 JavaScript 框架【申明:来源于网络】

    9 个用于移动APP开发的顶级 JavaScript 框架[申明:来源于网络] 地址:http://www.codeceo.com/article/9-app-javascript-framework ...

  4. ionic1滑动时间选择器

    上图: 1.derective代码 .directive('monthPicker', function ($ionicScrollDelegate) { return { restrict: 'E' ...

  5. slf4j日志使用

    scala中 trait LogSupport { protected val log = LoggerFactory.getLogger(this.getClass) } 需要要到的类 extend ...

  6. 小程序图表wx-chart

    下载地址 https://github.com/xiaolin3303/wx-charts 使用步骤: 一.解压后,把dist里面的wxcharts.js或者wxcharts-min.js放在小程序的 ...

  7. group_concat的使用

    1.场景 仓库使用系统实现了先进先出,给仓库的备货单原先设计如下模式: tx3表: 不同的批次分开行显示,仓库从这个备货单可以知道这个货品需要备货哪些批次,多少数量 用了几天,仓库对此备货单样式提出如 ...

  8. autoMapper的介绍

    .NET的DTO映射工具AutoMapper 分类: 多层架构 DTO .NET2012-08-11 10:27 2466人阅读 评论(0) 收藏 举报 原文:https://github.com/A ...

  9. es6阮一峰读后感

    不经意间看了你一眼(阮一峰的es6读后感)我自己常用的 字符串篇:ES6 为字符串添加了遍历器接口(详见<Iterator>一章),使得字符串可以被for...of循环遍历.只要有遍历器接 ...

  10. 3D打印机如何添加自动调平功能

    原理说明 Kossel/Rostock等Delta(并联/三角洲)类型的机器,可以参考:http://learn.makerlab.me/guides/11 3d打印打印时最重要的是第一层的效果,如果 ...