1. 文件的概念
1.1 文件的概念和作用
- 计算机的 文件, 就是存储在某种 长期储存设备 上的一段 数据
- 长期储存设备包括: 硬盘,U盘,移动硬盘,光盘…
文件的作用
将数据长期保持下来, 在需要的时候使用
1.2 文件的储存方式
- 在计算机中, 文件是以 二进制 的方式保持在磁盘上的
文本文件和二进制文件
-
文本文件
-
可以使用 文本编辑软件 查看
-
本质上海市二进制文件
-
例如: python 的源程序
二进制文件 -
保存的内容 不是给人直接阅读的, 二十 提供给其他软件使用的
-
例如: 图片文件, 音频文件, 视频文件等等
-
二进制文件不能使用 文本编辑软件 查看,需要使用专业的软件打开的
-
2. 文件的基本操作
2.1 操作文件的套路
在 计算机 中要操作文件的套路非常固定, 一共包含三个步骤:
-
打开文件
-
读, 写 文件
-
读 将文件内容读入内存
-
写 将内存内容写入文件
-
-
关闭文件
2.2 操作文件的函数 / 方法
- 在 Python 中要操作文件需要记住 1 个函数和 3 个方法
序号 | 函数 / 方法 | 说明 |
---|---|---|
1 | open | 打开文件, 并且返回文件操作对象,文件和数据库的地位相似txt等,py类似的就不行 |
2 | read | 将文件内容读取到内存 |
3 | write | 将指定内容写入文件 |
4 | close | 关闭文件 |
- open 函数负责打开文件, 并且返回文件对象
- read / write / close 三个方法都需要通过 文件对象 来调用
2.3 read 方法 ---- 读取文件
-
open 函数的第一个参数是要打开的文件名(文件名区分大小写的)
-
如果文件 存在, 返回 文件操作对象
-
如果文件 不存在, 会 抛出异常
-
-
read 方法可以一次性 读入 并 返回 文件的 所有内容
-
close 方法赋值 关闭文件
- 如果忘记关闭文件, 会造成系统资源消耗, 而且会影响到后续对文件的访问
-
注意: 方法执行后, 会把 文件指针 移动到 文件的末尾
# 1. 打开文件,返回文件操作对象
file = open("README")
# 2. 读取文件内容
text = file.read()
print(text)
# 3. 关闭
file.close()
# 一般在开发的时候,open和close我们是成对书写的。以防编写的时候忘记了,造成系统资源消耗
提示
- 在开发中, 通常会先编写 打开 和 关闭 的代码, 再编写中间针对文件的 读 / 写 操作!
文件指针 (知道)
-
文件指针 标记 从哪个位置开始读取数据
-
第一次打开 文件时, 通常 文件指针会指向文件的开始位置
-
当执行了 read 方法后, 文件指针 会移动到 读取内容的末尾
- 默认情况下会移动到 文件末尾
而且是,单项的不能随意返回的。
- 默认情况下会移动到 文件末尾
思考
- 如果执行了一次 read 方法, 读取了所有内容, 那么再次调用 read 方法, 还能够获得到内容吗?
答案
- 不能
- 第一次读取之后, 文件指针移动到了文件末尾, 再次调用不会读取到任何的内容
2.4 打开文件的方式
- open 函数默认以 只读方式 打开文件, 并且返回文件对象
# 语法如下 :
f = open("文件名", "访问方式")
访问方式 | 说明 |
---|---|
r | 以 只读 方式打开文件. 文件的指针将会放在文件的开头, 这是 默认模式. 如果文件不存在, 抛出异常 |
w | 以 只写 方式打开文件. 如果文件存在会被覆盖. 如果文件不存在, 创建新文件 |
a | 以 追加 方式打开文件. 如果该文件已存在, 文件指针将会放在文件的结尾. 如果文件不存在, 穿件新文件进行写入 |
r+ | 以 读写 方式打开文件, 文件的指针将会放在文件的开头. 如果文件不存在, 抛出异常 |
| w+ | 以 读写 方式打开文件, 如果文件存在会被覆盖. 如果文件不存在, 创建新文件|
| a+ | 以 读写 方式打开文件. 如果该文件已存在, 文件指针将会放在文件的结尾, 如果文件不存在,创建新文件进行写入|
提示
频繁的移动文件指针, 会影响文件的读写效率, 开发中更多的时候会以 只读, 只写 的方式来操作文件
2.5 按行读取文件内容
- read 方法默认会把文件的 所有内容 一次性读取到内存
- 如果文件太大, 对内存的占用会非常严重
readline方法
- readline 方法可以一次读取一行内容
- 方法执行后, 会把 文件指针 移动到下一行, 准备再次读取
读取大文件的正确姿势,减少系统压力
# 1. 打开文件
file = open("README")
# 2. 读取文件内容
while True:
text = file.readline()
# 判断时候有内容
if not text:
break
print(text)
# 3. 关闭
file.close()
2.6 文件读写案例 ---- 复制文件
小文件复制
打开一个已有文件, 读取完整内容, 并写入到另一个文件
# 1. 打开文件
file = open("README")
file2 = open("README2", "w")
# 2. 读, 写文件内容
text = file.read()
file2.write(text)
# 3. 关闭
file.close()
file2.close()
大文件复制
一行一行读, 写
# 1. 打开文件
file = open("README")
file2 = open("README2", "w")
# 2. 读, 写文件内容
while True:
# 读取一行内容
text = file.readline()
# 判断时候读取到内容
if not text:
break
# 每次写入文件指针会到文件的末尾
file2.write(text)
# 3. 关闭
file.close()
file2.close()
3. 文件 / 目录的常用管理操作
针对文件的操作不是文件数据的操作!!!
- 在 终端 / 文件浏览器, 中可以执行常规的 文件 / 目录 管理操作,例如:
-创建,重命名,删除,改变路径,查看目录内容… - 在 Python 中, 如果希望通过程序实现上述功能, 需要导入 os 模块
4. 文件文本的编码格式
- 文本文件存储的内容是基于 字符编码 的文件, 常见的编码有 ASCII 编码 , UNICODE 编码等
Python 2.x 默认使用 ASCII 编码
Python 3.x 默认使用 UTF-8 编码
4.1 ASCII 编码 和 UNICODE 编码
ASCII 编码
- 计算机中只有 256 个ASCII 编码
- 一个 ASCII 在内存中占用 1个字节(八位) 的空间
UTF-8 编码
- 计算机中使用 1-6 个字节 来表示一个 UTF-8 字符, 涵盖了 地球上几乎所有地区的文字
- 大多数汉子会使用 3个字节 表示
- UTF-8 是 UNICODE 编码的一种编码格式
4.2 python 2.x中如何使用中文的
python 2.x 默认使用的ASCII编码格式
python 3.x 默认使用的UTF-8(可表示的范围更广)编码格式
- 在python 2.x 文件的 第一行 增加以下代码,解释器会utf-8编码来处理python文件
# *-* coding:utf8 *-*
也可以使用这种方式
# coding=utf8
unicode字符串
- 在python 2.x 中,即使指定了文件使用,UTF-8的编码格式,但是,在便利字符串时,仍然会以字节为单位遍历字符串
- 要能够正确的遍历字符串,在定义字符串时,需要在字符串的引号前,增加一个小写字母u,告诉解释器这是一个unicode字符串(使用UTF-8编码格式字符串)
也就是在字符串中有汉字的时候的解决办法!
这就是出现危险的地方