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

掌握,python,文件,操作,基础,高阶,全方位,探索 · 浏览次数 : 427

小编点评

**Python 文件操作指南** **基础文件操作** * `open()` 函数:用于打开文件,返回文件对象。 * `read()` 函数:用于读取文件的内容。 * `write()` 函数:用于写入文件的内容。 * `close()` 函数:用于关闭文件。 **高级文件处理** * `os` 模块:提供用于文件操作的函数,如重命名、删除、创建目录等。 * `shutil` 模块:提供更高级的文件操作功能,如复制、移动等。 **文件编码** * `open()` 函数的 `encoding` 参数用于指定文件的编码方式。 * `pickle` 模块用于对象序列化和反序列化。 **文件异常处理** * `try` 和 `except` 语句用于捕获文件操作中的异常。 **使用 `os.path` 模块** * `os.path.abspath()` 获取文件的绝对路径。 * `os.path.dirname()` 获取文件所在的目录。 * `os.path.basename()` 获取文件的基本名。 **文件路径处理** * `os.walk()` 函数用于生成目录树中的文件名。 * `fnmatch` 模块用于实现文件模式匹配搜索。 **其他** * `os.mkdir()` 创建一个新的目录。 * `os.rename()` 重命名文件。 * `os.remove()` 删除文件。 * `pickle.dump()` 和 `pickle.load()` 用于序列化和反序列化对象。

正文

在本篇博客中,我们将全面、深入地探讨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!

更高级的文件处理:osshutil模块

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产品业务负责人。

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

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

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

一文掌握Python多线程与多进程

# Python的多线程和多进程 ## 一、简介 并发是今天计算机编程中的一项重要能力,尤其是在面对需要大量计算或I/O操作的任务时。Python 提供了多种并发的处理方式,本篇文章将深入探讨其中的两种:多线程与多进程,解析其使用场景、优点、缺点,并结合代码例子深入解读。 ## 二、多线程 Pyth

10分钟掌握Python缓存

全文速览 python的不同缓存组件的使用场景和使用样例 cachetools的使用 项目背景 代码检查项目,需要存储每一步检查的中间结果,最终把结果汇总并写入文件中 在中间结果的存储中 可以使用context进行上下文的传递,但是整体对代码改动比较大,违背了开闭原则 也可以利用缓存存储,处理完成之

一篇文章掌握Python中多种表达式的使用:算术表达式、字符串表达式、列表推导式、字典推导式、_集合推导式、_生成器表达式、逻辑表达式、函数调用表达式

Python 中的表达式可以包含各种元素,如变量、常量、运算符、函数调用等。以下是 Python 表达式的一些分类及其详细例子: 1. 算术表达式 算术表达式涉及基本的数学运算,如加、减、乘、除等。 # 加法表达式 sum = 3 + 5 # 结果为 8 # 乘法表达式 product = 4 *

Python和PyTorch深入实现线性回归模型:一篇文章全面掌握基础机器学习技术

# 1. 简介 ## 1.1 线性回归模型概述 ![file](https://img2023.cnblogs.com/other/488581/202307/488581-20230728153949582-615920927.png) 线性回归是一种统计学中的预测分析,该方法用于建立两种或两种以

<Python全景系列-1> Hello World,1分钟配置好你的python环境

欢迎来到我们的系列博客《Python360全景》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系列都将提供你需要的知识和技能。这是我们的第一篇文章,让我们从最基础的开始:如何在你的电脑上配置Python环境。

《最新出炉》系列初窥篇-Python+Playwright自动化测试-16-处理模态对话框弹窗

1.简介 我们在日常工作中,会经常遇到弹出警告框的问题,弹框无法绕过,必须处理才可以执行后续的测试,所以弹框处理也是我们必须掌握的一个知识。宏哥在java+selenium系列文章中介绍过这部分内容。那么,playwright对于弹框的处理是怎样的?是否比selenium更加简单呢?下面我们就来介绍

< Python全景系列-6 > 掌握Python面向对象编程的关键:深度探索类与对象

Python全景系列的第六篇,本文将深入探讨Python语言中的核心概念:类(Class)和对象(Object)。我们将介绍这些基本概念,然后通过示例代码详细展示Python中的类和对象如何工作,包括定义、实例化和修改等操作。本文将帮助您更深入地理解Python中的面向对象编程(OOP),并从中提出一些不常见但很有用的技术观点。

深入Scikit-learn:掌握Python最强大的机器学习库

> 本篇博客详细介绍了Python机器学习库Scikit-learn的使用方法和主要特性。内容涵盖了如何安装和配置Scikit-learn,Scikit-learn的主要特性,如何进行数据预处理,如何使用监督学习和无监督学习算法,以及如何评估模型和进行参数调优。本文旨在帮助读者深入理解Scikit-

算法金 | 只需十四步:从零开始掌握Python机器学习(附资源)

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 1. 引言 1.1 教程目的与读者定位 "启程"往往是最具挑战性的一步,特别是在面临众多选择时,人们往往难以做出决策。本教程旨在帮助那些几乎没有Python机器学习基础的初学者成长为知识