Python 文件操作与路径

简介: 假如在根目录的 Users 文件夹下有一个文件夹 xiaoaoquan, 其中有一个 Documents 文件夹,存储了 report.docx 文件。路径指明了文件在计算机中存储的位置。函数创建文件对象赋值给 file1 后, 直接查看其内容可以看到该 对象打开的物理文件(含路径和文件名),打开模式和编码。码只能表示英文字母和符号的限制, 为每种语言的每个字符设定了唯一的编码,以满足跨语言、跨平台进行文本转换和处理的要求。方法返回指 定目录中包含的文件和子目录列表,默认情况下返回当前工作目录中的信息。
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
🍎个人主页: 小嗷犬的博客
🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。
🥭本文内容:Python 文件操作与路径

1.文件与路径

在计算机中,文件指的是存储在磁盘上的数据序列,它可以包含任何数据内容。

文件名是文件的一个重要属性。文件名通常由文件主名和扩展名构成。一般来说, 主名和扩展名之间用一个圆点“.”隔开。 扩展名由 1 ~ 4 个字符组成,用于表示文件的类型。 例如:report.docx 是主名为report、扩展名为docx 的word文档,searchGoods.py 是主名为searchGoods、扩展名为 py 的 Python 源文件。

计算机中使用文件夹(也常常称为目录)来组织文件。文件夹可以包含文件和其他文件夹。

路径指明了文件在计算机中存储的位置。路径中包含了存储文件的各级文件夹。文件夹之间用斜线隔开。在 Windows 中使用倒斜杠\来分隔,在 Mac OS 和 Linux 中使 用正斜杠/作为路径分隔符。有两种方式表示文件路径。

  • 绝对路径:从根目录开始的路径。
  • 相对路径:从当前工作目录开始的路径。

还有点.和点点..文件夹。它们不是真正的文件夹,而是可以在路径中使用的特殊名称。单个的句点(“点”)用作文件夹目名称时,是“这个目录”的缩写。两个句点(“点点”)意思是父文件夹。

每个运行在计算机上的程序, 都有一个“当前工作目录”。 在 Python 中, 可以用 os 模块中的 getcwd() 方法获取当前工作目录:

import os
os.getcwd()
假如在根目录的 Users 文件夹下有一个文件夹 xiaoaoquan, 其中有一个 Documents 文件夹,存储了 report.docx 文件。

用绝对路径描述这个文件的位置为:

/Users/xiaoaoquan/Documents/report.docx
如果当前工作目录是 /Users/xiaoaoquan,用相对路径描述这个文件的位置为:
Documents/report.docx
os 模块中还包含大量文件相关操作的方法。 例如, listdir(path=None) 方法返回指 定目录中包含的文件和子目录列表,默认情况下返回当前工作目录中的信息。
os.listdir()

2.文本文件与二进制文件

计算机上存储的文件都是以二进制存储的,一般可以采取以下两种方式读取:

  • 文本文件:文件内容是常规的字符, 不会包含字体、大小和颜色等信息, 例如带 有 .py 扩展名的 Python 源文件。
  • 二进制文件:文件内容是特殊的字节数据, 例如 Word 文档、PDF 文档、图像文件 和编译后的可执行文件。

计算机中使用字符集表示字符。最常用的美国标准信息交换代码(American Standard Code for Information Interchange,ASCII 码)定义了从 0 到 127 的整数对应的字符。

print(ord('a'))
print(chr(97))
Unicode 突破了 ASCII 码只能表示英文字母和符号的限制, 为每种语言的每个字符设定了唯一的编码,以满足跨语言、跨平台进行文本转换和处理的要求。
print(ord('嗷'))
Unicode 字符按照特定编码规则(例如 UTF8 编码)翻译为原始字节形式的过程被称为 编码。反过来,把原始字节翻译为 Unicode 字符串的过程则被称为 解码

3.操作文件

在 Python 中,操作文件包含 3 个步骤:

  1. 调用 open() 函数打开物理文件,返回一个文件对象。
  2. 调用文件对象的 read()write() 方法读写文件。
  3. 调用文件对象关闭文件。

3.1 打开文件

Python 通过内置的 open() 函数打开文件并创建该对象。

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
file1 = open('test.txt')
print(type(file1))
print(file1)
利用内置 open() 函数创建文件对象赋值给 file1 后, 直接查看其内容可以看到该 对象打开的物理文件(含路径和文件名),打开模式和编码。

参数 mode 是打开文件的模式,如表所示,默认值为 'rt':

模式 说明
'r' 只读模式,如果文件不存在,返回异常FileNotFoundError,默认值
'w' 覆盖写模式,文件不存在则创建,存在则完全覆盖源文件
'x' 创建写模式,文件不存在则创建,存在则返回异常FileExistsError
'a' 追加写模式,文件不存在则创建,存在则在原文件最后追加内容
'b' 二进制文件模式
't' 文本文件模式,默认值
'+' 与r/w/x/a一同使用,在原功能基础上增加同时读写功能
参数 encoding 是指定文本文件读取数据时解码或写入数据时编码所用的规则, 为默认值 None 时使用的规则取决于操作系统。通过 sys 模块的方法可以查看当前默认编码。
import sys
sys.getdefaultencoding()

3.2 关闭文件

在操作完文件后,必须将文件关闭,这点非常重要。

调用文件对象的 close() 方法可以关闭文件, 终止文件对象与磁盘物理文件的连接、 释放操作系统资源。在写入和追加写入模式下,暂存于内存中的文件内容会输出到磁盘中永久保存。

file1 = open('test.txt')
file1.close()

3.3 写入文本文件

当指定 open() 函数的 mode 参数值为 ' w' ' x' 和 ' a' 时,可以向创建的文件对象中写入数据。使用文件对象的 write() 方法就可以将文本写入文件中。
file_obj.write(text)
file1 = open('test.txt', 'w', encoding='utf-8')
file1.write('我是小嗷犬。\n')
file1.close()

3.4 读取文本文件

在 Python 中, 使用 open() 函数打开文件时, mode 参数的默认值是“ rt”, 即以文本文件的形式读取文件。

3.4.1 使用文件内置方法读取

对于可读的文件对象,可以使用表的四种方法读取内容:
方法 说明
.readall() 以字符串形式返回整个文件内容
.read(size=-1) 默认读入从当前位置至文件末尾的内容;当size参数为大于0的正整数n时, 从文件中读入最多n个字符
.readline(size = -1) 默认从文件中读入一行内容;当size参数为大于0的正整数n时, 从当前行读入最多n个字符
.readlines(hint=-1) 默认返回以文件中所有行为元素构成的列表;当hint参数为大于0的正整数n时,读入的所有行字符数不超过 n行
当打开文本文件时,会有一个指针指向文件开头的字符。每次读取数据后,指针会往后移动到相应位置。 例如,在使用 readline() 读入一行内容时, 指针会移动到下一个换行符的后面,直到指向文件尾部标记 EOF(end of file)

3.4.2 使用 for 循环逐行读取

在绝大多数情况下,对于文本文件的读取都是逐行读取。文件对象本身是一个可迭代对象。 因此,通常情况下,推荐使用 for 循环来逐行读取文本文件内容。
file1 = open('test.txt', 'w', encoding='utf-8')
file1.write('我是小嗷犬。\n喜欢嗷嗷嗷。\n')
file1.close()
file2 = open('test.txt', encoding='utf-8')
for line in file2:
    print(line)
file2.close()

3.4.3 使用列表推导式和 map() 函数逐行处理

文件作为可迭代对象, 可以使用列表推导式和 map() 函数对每行进行相应处理, 生成新的列表。
file1 = open('test.txt', 'w', encoding='utf-8')
file1.write('我是小嗷犬,\n喜欢嗷嗷嗷。\n')
file1.close()
file2 = open('test.txt', encoding='utf-8')
lines1 = [line.rstrip() for line in file2]
print(lines1)
lines2 = list(map(lambda line: line.rstrip(), file2)
print(lines2)
file2.close()

3.5 使用 with 语句自动管理

Python 中的 with 语句适用于对资源进行访问的场合, 确保不管使用过程中是否发生异常都会释放资源,比如文件使用后自动关闭。
file1 = open('test.txt', 'w', encoding='utf-8')
file1.write('我是小嗷犬。\n喜欢嗷嗷嗷。\n')
file1.close()
with open('test.txt', encoding='utf-8') as file2:
    for line in file2:
        print(line)

目录
相关文章
|
2月前
|
安全 Python
Python语言中常用的文件操作方法探讨
通过上述方法的结合使用,我们可以构筑出强大并且可靠的文件操作逻辑,切实解决日常编程中遇到的文件处理问题。
157 72
|
7月前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
2月前
|
编译器 Python
如何利用Python批量重命名PDF文件
本文介绍了如何使用Python提取PDF内容并用于文件重命名。通过安装Python环境、PyCharm编译器及Jupyter Notebook,结合tabula库实现PDF数据读取与处理,并提供代码示例与参考文献。
|
2月前
|
编译器 Python
如何利用Python批量重命名文件
本文介绍了如何使用Python和PyCharm对文件进行批量重命名,包括文件名前后互换、按特定字符调整顺序等实用技巧,并提供了完整代码示例。同时推荐了第三方工具Bulk Rename Utility,便于无需编程实现高效重命名。适用于需要处理大量文件命名的场景,提升工作效率。
|
2月前
|
移动开发 安全 Linux
Python文件操作的"保险箱":with语句深度实战指南
本文深入解析Python中`with`语句的原理与高级应用,通过“保险箱”类比,形象展示资源管理机制。从上下文管理协议到实战场景,涵盖文件、数据库、网络等多种资源的高效安全处理方式,助你写出更优雅、可靠的代码。
68 1
|
3月前
|
编解码 Prometheus Java
当Python同时操作1000个文件时,为什么你的CPU只用了10%?
本文介绍如何构建一个高效的文件处理系统,解决单线程效率低、多线程易崩溃的矛盾。通过异步队列与多线程池结合,实现任务调度优化,提升I/O密集型操作的性能。
65 4
|
3月前
|
人工智能 索引 Python
[oeasy]python094_使用python控制音符列表_midi_文件制作
本文介绍了如何使用Python控制音符列表制作MIDI文件。首先回顾了列表下标索引(正数和负数)的用法,接着通过`mido`库实现MIDI文件生成。以《两只老虎》为例,详细解析了代码逻辑:定义音高映射、构建旋律列表、创建MIDI文件框架,并将音符插入音轨。还探讨了音符时值与八度扩展的实现方法。最终生成的MIDI文件可通过不同平台播放或编辑。总结中提到,此技术可用于随机生成符合调性的旋律,同时引发对列表其他实际应用的思考。
95 5
|
3月前
|
缓存 数据库连接 数据库
Python文件操作的“保险箱”:with语句深度实战指南
本文深入探讨Python中with语句在文件操作中的应用及其优势。首先介绍其底层原理,基于上下文管理协议自动管理资源的获取与释放,避免手动关闭文件导致的资源泄漏问题。接着通过基础文件读写、异常处理进阶和复合资源管理等实战场景解析with语句的便捷性与安全性。同时,阐述如何自定义上下文管理器以满足特定需求,并分析其性能考量及优化策略。最后总结实战经验,强调优先使用内置管理器、明确异常处理以及保持代码可读性的重要性,助力开发者高效编写健壮的程序。
72 1
|
2月前
|
数据采集 监控 算法
Python文件与目录比较全攻略:从基础操作到性能优化
文件比较的核心在于数据指纹校验,通过逐字节比对生成唯一标识,确保内容一致性。从标准库的os与filecmp到高性能第三方库如pydiffx,再到分布式与量子加密技术的未来趋势,文件比较广泛应用于数据备份、代码审查与系统监控等领域,是保障数据完整性的关键技术手段。
75 0
|
5月前
|
Python
使用Python实现multipart/form-data文件接收的http服务器
至此,使用Python实现一个可以接收 'multipart/form-data' 文件的HTTP服务器的步骤就讲解完毕了。希望通过我的讲解,你可以更好地理解其中的逻辑,另外,你也可以尝试在实际项目中运用这方面的知识。
251 69

热门文章

最新文章

推荐镜像

更多