##################################################
目录
##################################################
活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰;一个人摸索学习很难坚持,想组团高效学习;想写博客但无从下手,急需写作干货注入能量;热爱写作,愿意让自己成为更好的人…
…
欢迎参与CSDN学习挑战赛,成为更好的自己,请参考活动中各位优质专栏博主的免费高质量专栏资源(这部分优质资源是活动限时免费开放喔~),按照自身的学习领域和学习进度学习并记录自己的学习过程,或者按照自己的理解发布专栏学习作品!
##################################################
——————————
文本文件本质上还是二进制文件 只不过可以使用文本编辑软件查看内容
而二进制文件所存储的内容不是让人类直接阅读的
例如图片文件、音频文件、视频文件等等 均不能使用文本编辑器直接查看
——————————
在计算机中操作文件的步骤非常固定:
打开文件
读写文件
关闭文件
读取操作就是将文件内容读入内容
写入操作就是将内存内容写入文件
——————————
Python 操作文件一共需要四个函数:
- open 打开文件 并且返回文件操作对象
-
- read 读操作 将文件内容读取到内容中
- write 写操作 将指定内存中的内容写入文件里
-
- close 关闭文件
open 函数的第一个参数是要打开的文件 文件名是区分大小写的!
文件存在 返回 文件操作对象
文件不存在 抛出异常
其中 read、write、close 三个方法都需要对象来调用
read 方法可以一次性读入并返回文件的所有内容
read 方法执行后会把 文件指针 移动到 文件末尾 位置
close 方法负责关闭文件
如果忘记关闭文件 会造成系统资源消耗 而后影响到后续对文件的访问操作
——————————
%%%%%
先打开一个命令行:

进入 D 盘根目录 创建一个测试文件:
- Microsoft Windows [版本 6.3.9600]
- (c) 2013 Microsoft Corporation。保留所有权利。
-
- C:\Users\byme>d: /* 将当前目录切换到 D 盘根目录下 */
-
- D:\>dir test.py /* 看看有没有测试文件 test.py */
- 驱动器 D 中的卷是 Work
- 卷的序列号是 000D-8D77
-
- D:\ 的目录
-
- 找不到文件
-
- D:\>echo .> test.py /* 创建一个空文件 test.py */
-
- D:\>dir test.py /* 再次查看有没有测试文件 test.py */
- 驱动器 D 中的卷是 Work
- 卷的序列号是 000D-8D77
-
- D:\ 的目录
-
- 2022/08/18 07:22 3 test.py
- 1 个文件 3 字节
- 0 个目录 6,143,684,608 可用字节
-
- D:\>type test.py /* 查看 test.py 文件内容 */
-
-
- D:\>
%%%%%
需要注意的是路径的分隔符号 如果真实路径为:
D:\test.py
则需要转义一下 \ 符:
D:\\test.py
示例打开文件 D:\test.py 而 file_1 是存储的文件对象名:
- D:\>python
- Python 3.10.5 (tags/v3.10.5:f377153, Jun 6 2022, 16:14:13) [MSC v.1929 64 bit (AMD64)] on win32
- Type "help", "copyright", "credits" or "license" for more information.
- >>> file_1 = open ( "D:\\test.py" )
- >>>
%%%%%
示例调用 file_1 文件对象的 read 函数读取文件内容
读取的文件内容存储在 test_1 变量中
这边因为文件内容是空的所以读取也为空:
- >>> text_1 = file_1.read()
- >>> print ( text_1 )
-
- >>>
再次打开一个 cmd 命令行 在指定文件中输入内容:
- Microsoft Windows [版本 6.3.9600]
- (c) 2013 Microsoft Corporation。保留所有权利。
-
- C:\Users\byme>echo "崽崽 5211314 !" >> D:\test.py
-
- C:\Users\byme>type D:\test.py
-
- "崽崽 5211314 !"
-
- C:\Users\byme>
或者退出 Python 之后直接打开该文件输入内容:

如果没有退出或者关闭 Python 操作的文件 保存时会提示无法存储 因为此时文件受到 Python 保护
再次读取文件内容:
- D:\>python
- Python 3.10.5 (tags/v3.10.5:f377153, Jun 6 2022, 16:14:13) [MSC v.1929 64 bit (AMD64)] on win32
- Type "help", "copyright", "credits" or "license" for more information.
- >>> file_1 = open("D:\\test.py")
- >>> text_1 = file_1.read()
- >>> print( text_1 )
-
- "崽崽 5211314 !"
-
- dsfjuefjfefjhejf额发顺丰发色
- 98放-乳房;‘23-2=d'a~320ri32!分iktfgjm-0g
- >>>
%%%%%
示例关闭上面打开的文件:
- D:\>python
- Python 3.10.5 (tags/v3.10.5:f377153, Jun 6 2022, 16:14:13) [MSC v.1929 64 bit (AMD64)] on win32
- Type "help", "copyright", "credits" or "license" for more information.
- >>> file_1 = open("D:\\test.py")
- >>> text_1 = file_1.read()
- >>> file_1.close()
- >>>
我们编写代码操作文件时通常都是先编写打开和关闭的代码 再编写中间针对文件的读写操作!
%%%%%
关于文件指针:
文件指针标记从哪个位置开始读取数据
第一次打开文件时通常文件指针对指向文件的开始位置
当执行了 read 方法后文件指针会移动到读取内容的末尾
默认情况下会移动到文件末尾
当执行了一次 read 方法读取了所有内容之后 再次调用 read 方法是不会读取到任何的内容的……
因为文件指针已经移动到了文件末尾!!!
——————————
%%%%%
open 函数默认以 只读方式 打开文件且返回文件对象
设置访问方式语法:
f = open("文件名", "访问方式")
访问方式如下:
- r 只读模式 以只读方式打开文件 文件指针在文件开头 这是默认模式 如果文件不存在则抛出异常
- w 只写模式 以只写方式打开文件 如果文件存在则会被覆盖 如果文件不存在则创建新文件
- a 追加方式 以追加方式打开文件 如果文件已存在 文件指针将会移动到文件末尾 如果文件不存在 则创建新文件进行写入
- r+ 读写模式 以读写方式打开文件 文件指针将会放在文件的开头 如果文件不存在 则抛出异常
- w+ 读写模式 以读写方式打开文件 如果文件已存在会被覆盖 如果文件不存在 则会创建新文件
- a+ 读写模式 以读写方式打开文件 如果文件已存在 文件指针将会放在文件的结尾 如果文件不存则创建新文件进行写入
需要注意:
频繁的移动文件指针会影响文件的读写效率 开发中更多的情况我们只会以 只读/只写 方式来操作文件
%%%%%
使用 os 模块中的 getcwd() 这个函数来返回默认存储路径
如果未指定路径 则在此处保存文件:
- D:\>python
- Python 3.10.5 (tags/v3.10.5:f377153, Jun 6 2022, 16:14:13) [MSC v.1929 64 bit (AMD64)] on win32
- Type "help", "copyright", "credits" or "license" for more information.
- >>> import os
- >>> print(os.getcwd())
- D:\
- >>>
我这边创建的文件默认保存在 D 盘根目录下!
%%%%%
示例新建打开一个文件 写入信息 关闭文件 然后再查看文件内容:
- D:\>type Python_1.py # 查看文件内容发现文件不存在
- 系统找不到指定的文件。
-
- D:\>python
- Python 3.10.5 (tags/v3.10.5:f377153, Jun 6 2022, 16:14:13) [MSC v.1929 64 bit (AMD64)] on win32
- Type "help", "copyright", "credits" or "license" for more information.
- >>> file_1 = open("Python_1.py", "w") # 以只写方式打开文件
- >>> file_1.write( "你好,Python!\n" ) # 写入信息
- 11
- >>> file_1.write("好你妈\n我一点都不好好吗!!!") # 写入信息
- 15
- >>> file_1.close() # 关闭文件
- >>> quit() # 退出 Python 命令行
-
- D:\>type Python_1.py # 再次查看文件内容
- 你好,Python!
- 好你妈
- 我一点都不好好吗!!!
- D:\>
%%%%%
按行读取文件内容
read 方法默认会把文件的所有内容一次性全部读取到内存
这种情况下如果读取大文件对内容的占用会非常严重!
而 readline 方法可以一次读取一行内容
readline 方法执行后会把文件指针移动到下一行 准备再次读取!
读取大文件的正确姿势 VSCode code:
- file = open ( "D:\\Python_1.py" ) # 打开指定文件 D:\Python_1.py
-
- while True:
- # 死循环
-
- text = file.readline() # 读取一行内容
-
- if not text:
- # 判断是否读到内容 如果没有读取到内容就退出!
- break
-
- print ( text, end = "" ) # 输出读取该行信息 不换行驶因为每读取一行的末尾已经有了一个 `\n` 换行符
-
- file.close() # 关闭文件
- print ( "\n\n文件读取结束.." )
VSCode demo:
- Windows PowerShell
- 版权所有 (C) 2014 Microsoft Corporation。保留所有权利。
-
- PS C:\Users\byme> python -u "e:\PY\test.py"
- 你好,Python!
- 好你妈
- 我一点都不好好吗!!!
-
- 文件读取结束..
- PS C:\Users\byme>
