掌握Python文件操作:从基础到高阶的全方位探索

这篇具有很好参考价值的文章主要介绍了掌握Python文件操作:从基础到高阶的全方位探索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在本篇博客中,我们将全面、深入地探讨Python中的文件操作。文件操作在Python编程中是不可或缺的一部分,它包含了打开、读取、写入和关闭文件等各种操作。我们将从基础的文件操作讲解到高级的文件处理技巧,以及如何优雅地使用Python进行文件操作。每一部分我们都会分享一些独特的用法,并且附有具体的示例代码和输出结果。在文章的最后,我们还将分享一些鲜为人知但非常实用的文件操作技巧。

基础文件操作:打开、读取、写入和关闭文件

Python使用内置的open()函数来打开一个文件,它返回一个文件对象,常用的模式如下:'r'表示读取,'w'表示写入(会先清空原有文件),'a'表示追加,'b'表示二进制模式。特别的,我们可以使用with关键字,这样当我们完成操作后,文件将自动关闭。

# 以读取模式打开一个文件
with open('file.txt', 'r') as file:
    content = file.read()
print(content)

当你运行这段代码,假设file.txt的内容是Hello, Python!,你会看到以下输出:

Hello, Python!

文件读取:细粒度控制

除了一次性读取整个文件,我们还可以以更小的单位来读取文件。这对于处理大文件时非常有用,可以有效控制内存的使用。

with open('file.txt', 'r') as file:
    while True:
        line = file.readline()
        if not line:
            break
        print(line, end='')

这段代码会逐行读取file.txt文件的内容并打印。其中,end=''是为了防止print函数在每次打印后都插入一个换行符,因为从文件中读取的每一行都已经带有一个换行符。

文件写入:内容追加与覆盖

我们使用写入模式('w')或追加模式('a')来写入文件。这里有一个小技巧:如果你的程序需要频繁写入文件,那么在写入时使用\n来换行会比使用write()函数后再使用write('\n')函数来插入新行更有效率。

with open('file.txt', 'a') as file:
    file.write('Hello, Python!\n')

这段代码会在file.txt文件的末尾追加一行Hello, Python!

更高级的文件处理:os和shutil模块

Python的os模块和shutil模块为我们提供了更高级的文件操作功能,如重命名文件、删除文件、创建

目录、复制文件等。

import os
import shutil

# 创建一个新的目录
os.mkdir('new_folder')

# 重命名文件
os.rename('old.txt', 'new.txt')

# 复制文件
shutil.copy2('src.txt', 'dst.txt')

# 删除文件
os.remove('file_to_delete.txt')

运行这段代码会按顺序执行上述文件操作。

文件编码:处理不同编码格式的文件

在处理文件时,我们可能会遇到各种不同的编码格式,如UTF-8, ASCII, ISO-8859-1等。Python的open()函数允许我们通过encoding参数来指定文件的编码方式。

with open('file.txt', 'r', encoding='utf-8') as file:
    content = file.read()
print(content)

如果你尝试读取一个包含非ASCII字符的文本文件,但没有提供正确的编码参数,Python可能会抛出UnicodeDecodeError。在这种情况下,你需要知道文件的正确编码格式才能正确地读取文件。

# 尝试读取一个包含非ASCII字符的文件,但没有指定正确的编码格式
try:
    with open('file.txt', 'r') as file:
        content = file.read()
except UnicodeDecodeError:
    print("UnicodeDecodeError occurred!")

这段代码会捕获UnicodeDecodeError并打印一个错误消息。

文件异常处理:确保代码的健壮性

在文件操作中,我们可能会遇到各种异常情况,例如文件不存在、没有读取/写入权限等。我们可以使用Python的异常处理机制来捕获这些异常并作出相应的处理。

try:
    with open('nonexistent_file.txt', 'r') as file:
        content = file.read()
except FileNotFoundError:
    print('File does not exist!')
except PermissionError:
    print('No permission to read the file!')

这段代码会捕获FileNotFoundErrorPermissionError,并分别打印出相应的错误消息。

使用pickle进行对象序列化和反序列化

Python的pickle模块提供了将对象转换为一种可以存储到文件或在网络上传输的格式(这个过程称为序列化),以及从这种格式重新构造对象(这个过程称为反序列化)的功能。这是一种非常方便的方式来保存和加载Python对象。

import pickle

data = {
    'name': 'John',
    'age': 30,
    'pets': ['cat', 'dog']
}

# 序列化并保存到文件
with open('data.pkl', 'wb') as file:
    pickle.dump(data, file)

# 从文件加载并反序列化
with open('data.pkl', 'rb') as file:
    loaded_data = pickle.load(file)

print(loaded_data)

运行这段代码,你会看到以下输出:

{'name': 'John', 'age': 30, 'pets': ['cat', 'dog']}

这就是原始的data字典对象。

文件路径处理

在处理文件路径时,Python的os.path模块提供了一系列函数来解析、构造和修改文件路径。这些函数都是跨平台的,因此无论你的程序运行在Windows、macOS还是Linux上,都可以安全地使用它们。

import os

# 获取文件的绝对路径


abs_path = os.path.abspath('file.txt')
print(f'Absolute path: {abs_path}')

# 获取文件所在的目录
dir_name = os.path.dirname(abs_path)
print(f'Directory: {dir_name}')

# 获取文件的基本名和扩展名
base_name = os.path.basename(abs_path)
print(f'Base name: {base_name}')
root, ext = os.path.splitext(base_name)
print(f'Root: {root}, Extension: {ext}')

假设file.txt位于/home/user/documents/目录下,运行这段代码会输出:

Absolute path: /home/user/documents/file.txt
Directory: /home/user/documents
Base name: file.txt
Root: file, Extension: .txt

One More Thing: 文件遍历和搜索

Python的os模块提供了一个os.walk()函数,这是一个简单易用但强大的工具,用于在目录树中生成文件名。结合fnmatch模块,我们可以实现对文件的模式匹配搜索。

import os
import fnmatch

def find(pattern, path):
    result = []
    for root, dirs, files in os.walk(path):
        for name in fnmatch.filter(files, pattern):
            result.append(os.path.join(root, name))
    return result

# 查找当前目录及其所有子目录中的所有.txt文件
print(find('*.txt', '.'))

假设当前目录及其子目录下有file1.txt, file2.txt, sub/file3.txt三个文件,运行这段代码会输出:

['./file1.txt', './file2.txt', './sub/file3.txt']

我们希望你能从这篇博客中学到Python文件操作的各种技巧,并能在你的Python编程之旅中发挥作用。如果你有任何问题或想法,欢迎留言交流。

如有帮助,请多关注
个人微信公众号:【Python全视角】
TeahLead_KrisChang,10+年的互联网和人工智能从业经验,10年+技术和业务团队管理经验,同济软件工程本科,复旦工程管理硕士,阿里云认证云服务资深架构师,上亿营收AI产品业务负责人。文章来源地址https://www.toymoban.com/news/detail-479766.html

到了这里,关于掌握Python文件操作:从基础到高阶的全方位探索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go泛型解密:从基础到实战的全方位解析

    本篇文章深入探讨了Go语言的泛型特性,从其基础概念到高级用法,并通过实战示例展示了其在实际项目中的应用。 关注【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人

    2024年02月08日
    浏览(47)
  • Python教程(24)——全方位解析Python中的装饰器

    Python装饰器是一种特殊的函数,它接收一个函数作为参数,然后返回一个新的函数,用于扩展或修改原始函数的行为。装饰器提供了一种便捷的方式来在不修改被装饰函数源代码的情况下,增加、修改或包装函数的功能。通俗点说就是尽量不修改原有功能代码的情况下,给原

    2024年02月02日
    浏览(60)
  • “探索C语言操作符的神秘世界:从入门到精通的全方位解析“

    各位少年,我是博主 那一脸阳光 ,今天来分享深度解析C语言操作符,C语言操作符能帮我们解决很多逻辑性的问题,减少很多代码量,就好比数学的各种符号,我们现在深度解剖一下他们。 在追求爱情的道路上,拥有吸引人的外表与内在气质固然重要,它们如同璀璨星辰,

    2024年01月25日
    浏览(49)
  • npm包安装与管理:深入解析命令行工具的全方位操作指南,涵盖脚本执行与包发布流程

    npm,全称为Node Package Manager,是专为JavaScript生态系统设计的软件包管理系统,尤其与Node.js平台紧密关联。作为Node.js的默认包管理工具,npm为开发者提供了便捷的方式来安装、共享、分发和管理代码模块。 npm作为JavaScript世界不可或缺的基础设施,极大地促进了代码复用和协作

    2024年04月12日
    浏览(78)
  • 全方位解析 pinia

    前言 Vue3已经推出很长时间了,它周边的生态也是越来越完善了。之前我们使用Vue2的时候,Vuex可以说是必备的,它作为一个状态管理工具,给我们带来了极大的方便。Vue3推出后,虽然相对于Vue2很多东西都变了,但是核心的东西还是没有变的,比如说状态管理、路由等等。再

    2024年04月25日
    浏览(52)
  • Kotlin全方位-简单解析

    Kotlin是一种现代化的静态类型编程语言,由JetBrains公司开发。它可以在Java虚拟机(JVM)上运行,并且可以与Java代码无缝地进行互操作。Kotlin旨在提供更简洁、更安全、更具表达力和更高效的编程语言。 Android开发:Kotlin被广泛用于Android应用程序的开发。它可以与Java代码互操

    2024年02月10日
    浏览(58)
  • Java——线程睡眠全方位解析

    在 Java 中,让线程休眠的方法有很多,这些方法大致可以分为两类,一类是设置时间,在一段时间后自动唤醒,而另一个类是提供了一对休眠和唤醒的方法,在线程休眠之后,可以在任意时间对线程进行唤醒。 线程睡眠的方法有以下 5 个: Thread.sleep TimeUnit wait Condition LockSu

    2024年02月04日
    浏览(58)
  • 【深入浅出Spring原理及实战】「夯实基础系列」360全方位渗透和探究Spring的核心注解开发和实现指南(Spring5的常见的注解)

    Spring 5.x中常见的注解包括@Controller、@Service、@Repository。当我们研究Spring Boot源码时,会发现实际上提供了更多的注解。了解这些注解对于我们非常重要,尽管目前可能还用不到它们。 注解 功能 @Bean 器中注册组件,代替来的标签 @Configuration 声明这是一个配置类,替换以前的配

    2024年02月16日
    浏览(46)
  • 精彩解读:短链接应用全方位探究

    1. 短链接的定义和原理 短链接是一种将长网址转换为短网址的服务,通过简化网址长度,方便用户分享和传播链接。短链接服务通过将长网址映射到短标识符的方式,实现对原始网址的压缩和简化。用户在访问短链接时,系统会将短链接还原为原始长网址,实现跳转到目标网

    2024年04月08日
    浏览(48)
  • kafka知识点全方位讲解

    Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。 Kafka最初是由LinkedIn开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。 Kafka是一个分布式消息队列:

    2023年04月25日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包