python 基础系列(八) — Python中的文件操作
python基础系列索引
python 基础系列(一) — Python介绍
python 基础系列(二) — Python基本语法
python 基础系列(三) — Python中的变量进阶
python 基础系列(四) — Python中的面向对象
python 基础系列(五) — Python中的继承
python 基础系列(六) — Python的异常及其处理
python 基础系列(七) — Python中的模块
python 基础系列(八) — Python中的文件操作
python 基础系列(九) — Python中的vi – 终端中的编辑器
python 基础系列(十) — Windows CMD命令大全
python 基础系列(十一) — 使用PyCharm远程调试树莓派python代码 — Windows CMD命令大全
如果你对python感兴趣,不妨看一下我的其他文章
1.文件的存储方式
-
文本文件
- 可以使用文本编辑器
- 本质上还是二进制文件
-
二进制文件
- 保存的内容不是直接给人阅读的,而是提供给其他文件使用的
- 例如: 图片文件、音频文件、视频文件
- 二进制文件不能使用人本编辑软件查看
2.文件的基本操作
操作文件的套路
- 打开文件
- 读、写文件
- 关闭文件
操作文件的函数/方法
| 序号 | 函数/方法 | 说明 |
|---|---|---|
| 01 | open | 打开文件,并返回文件对象 |
| 02 | read | 将文件内容读取到内存 |
| 03 | write | 将指定内容写入文件 |
| 04 | close | 关闭文件 |
open函数负责打开文件,并返回文件对象read/write/close三个方法都需要,文件对象来调用
2.3 read 方法 – 读取文件
-
open函数的第一个参数是要打开的文件名(文件名区分大小写)- 如果文件存在,返回 文件操作对象
- 如果文件不存在,抛出异常
-
read方法可以一次性读入并返回文件的所有内容 -
close方法负责关闭文件- 如果 忘记关闭文件,会造成系统资源消耗,而且会影响到后续对文件的访问、修改
-
注意:方法执行后,会把 文件指针 移动到文件的末尾
# 1. 打开文件 ,注意文件文件名大小写, 注意指定编码集 file = open("README.txt", encoding="utf-8") # 2. 一次性读取所有文件内容 text = file.read() print(text) # 3. 关闭打开的文件 file.close()
文件指针
- 文件指针 标记 从按个位置开始读取数据
- 第一次打开文件时, 通常 文件指针会指向文件的开始位置
- 当执行了
read方法之后,文件指针 会移动到 读取内容的末尾- 默认情况下会移动到文件的末尾。
注意:当使用
read方法读取内容后,再次执行read方法读取时,文件内容为空
代码示例
file = open("README.txt", encoding="utf-8")
text = file.read()
print(text)
print(len(text))
text = file.read()
print(text)
print(len(text))
file.close()
运行结果
可以的
3
0
打开文件的方式
open函数默认只读方式打开文件,并返回文件对象
语法如下
f = open("文件名","访问方式",, encoding="文件编码方式"))
| 访问方式 | 说明 |
|---|---|
| r | 以只读方式打开文件,文件的指针将会放在文件的开头、这是默认模式,如果文件不存在抛出异常 |
| w | 以写的方式打开文件,如果文件存在会覆盖;文件不存在会创建新文件 |
| a | 已追加的方式打开文件,如果文件已存在,文件指针会放在文件结尾;如果文件不存在会创建新文件并写入 |
| r+ | 以读写方式打开文件。文件的指针将会放在文件的开头。如果文件不存在,抛出异常 |
| w+ | 以读写方式打开文件。如果文件存在会被覆盖,如果文件不存在会创建新文件 |
| a+ | 以读写方式打开文件。如果该文件已存在,文件指针将会放在文件结尾;如果文件不存在创建新文件写入 |
提示:
r+/w+/a+的方式操作文件,会频繁的移动文件指针,影响文件的操作效率,开发中更多的是 以只读、只写或者追加的方式操作文件
按行读取文件内容
read方法默认情况下会把文件的 所有内容一次性读取到内存中- 如果文件太大内存占用严重
readline方法
readline方法可以一次性读取一行内容- 方法执行后,会把文件指针移动到下一行,准备再次读取
读取大文件的正确姿势
file = open("README.txt", encoding="utf-8")
while True:
# 读取一行
line = file.readline()
# 判断是否读取到内容
if not line:
break
# 每一行文件的末尾默认已经有换行
print(line,end="")
file.close()
运行结果
五日观妓
唐代:万楚
西施谩道浣春纱,碧玉今时斗丽华。
眉黛夺将萱草色,红裙妒杀石榴花。
新歌一曲令人艳,醉舞双眸敛鬓斜。
谁道五丝能续命,却令今日死君家。
文件复制
代码示例
# 打开文件
file_read = open("README.txt", "r", encoding="utf-8")
file_write = open("copy.txt", "w", encoding="utf-8")
# 读写文件
file_write.write(file_read.read())
# 关闭
file_read.close()
file_write.close()
读取大文件
# 打开文件
file_read = open("README.txt", "r", encoding="utf-8")
file_write = open("copy.txt", "a", encoding="utf-8")
while True:
# 读写文件
line = file_read.readline()
if not line:
break
file_write.write(line)
# 关闭
file_read.close()
file_write.close()
文件/目录的常用操作
-
在 终端/文件浏览器 、 中可以执行常规的
文件/目录操作管理,例如- 创建、重命名、删除、干煸路径、查看内容、…
-
在
python中,如果希望通过程序事项上述功能,需要导入os模块
文件操作
| 序号 | 方法名 | 说明 | 示例 |
|---|---|---|---|
| 01 | rename | 重命名文件 | os.rename(源文件名,目标文件名) |
| 02 | remove | 删除文件 | os.rename(文件名) |
目录操作
| 序号 | 方法名 | 说明 | 示例 |
|---|---|---|---|
| 01 | listdir | 查看目标列表 | os.listdir(目录名) |
| 02 | mkdir | 创建目录 | os.mkdir(目录名) |
| 03 | rmdir | 删除目录 | os.rmdir(目录名) |
| 04 | getcwd | 获取当前目录 | os.getcwd() |
| 05 | chdir | 修改工作目录 | os.chdir(目录名) |
| 06 | path.isdir | 判断是否是文件夹 | os.path.isdir(文件路径) |
提示:文件和目录操作都支持 相对路径和绝对路径
文本文件的编码格式
- 文本文件存储的内容是基于 字符编码 的文件,常见的编码
ASCII编码,UNICODE编码等
Python 2.x 默认使用
ASCII编码
Python 3.x 默认使用UFT-8编码
ACII 编码和 UNICODE 编码
-
在python 2.x 文件的 第一行 增加以下代码 , 解释器会以
utf-8编码处理python文件# *-* coding:utf8 *-*
这种方式是官方推荐使用的!
# coding=utf-8
-
unicode 字符串
-
在
Python 2.x中,机使指定了文件使用UTF-8的编码格式,但是在遍历字符串时,任然 以字节为单位遍历 字符串 -
要能够 正确的遍历字符串,在定义字符串时,需要 在字符串的引号前 ,增加一个小写字母
u,告诉解释器这是一个unicode字符串(使用UTF-8编码格式的字符串)
在 Python 2.x中定义中文字符串
str = u"你好世界"
可以解决乱码问题
eval 函数
eval()函数十分强大 – 将字符串 当成 有效的表达式 来求值并 返回计算结果
示例代码
# 基本的数学计算
print(eval("1 + 1"))
# 字符串重复 eval(参数必须是一个字符串)
print(eval("'*' * 10"))
# 将字符串转换成列表
print(eval("type([1,2,3])"))
# 将字符串转换成列表
print(eval("type({'name':'小明','age':12})"))
执行结果:
2
**********
<class 'list'>
<class 'dict'>
应用场景
-
制作一个简易的计算器,用户输入计算表达式,返回计算结果
str = input(“请输入计算表达式”)
print(eval(str))
运行
输入 1+2
返回 3
不要滥用 eval()函数
在开发时千万不要使用
eval()函数直接转换input函数的结果
比如在 input 函数中直接输入 如下代码
__import__('os').import('ls')
上述代码等价于
import os
os.system("终端命令")
执行成功返回0
执行失败报错
本文是Python基础系列的第八篇,主要讲解Python中的文件操作,包括文件的存储方式(文本文件与二进制文件)、基本操作(打开、读写、关闭文件)、read方法、文件指针、按行读取、文件复制、大文件处理、编码格式以及eval函数的使用和注意事项。
71万+

被折叠的 条评论
为什么被折叠?



