Python文件操作指南:编码、读取、写入和异常处理

news2024/12/23 22:09:09

文章目录

  • 文件的编码
  • 文件的读取
            • 使用 `read` 方法读取整个文件内容:
            • 使用 `readlines` 方法按行读取文件内容并存储到列表中:
            • 使用迭代器遍历文件内容:
  • 文件的写入
  • 文件的追加
  • 文件操作的综合案例
  • 文件的关闭
  • 文件的存在性检查
  • 异常处理
  • 文件操作的更多方法
  • 使用 `with` 语句进行文件写入
  • 使用 `try-except` 处理文件读取异常
  • 使用 `os` 模块进行文件操作
  • 使用 `shutil` 模块进行文件操作
  • 文件读取的其他方法
  • 文件追加写入
  • 文件的属性和信息
  • 文件扩展名的处理
  • 总结

文件的编码

文件的编码

文件编码指定了文件中字符的表示方式。在 Python 中,可以使用 open 函数的 encoding 参数来指定文件的编码。

file = open('file.txt', 'r', encoding='utf-8')

常见的文件编码包括 ASCII、UTF-8、GBK 等。确保正确选择文件编码,以便正确读取和写入文件。

文件的读取

文件的读取

Python 提供了多种方法来读取文件的内容。

使用 read 方法读取整个文件内容:
file = open('file.txt', 'r', encoding='utf-8')
content = file.read()  # 将整个文件内容作为一个字符串返回
print(content)
file.close()
使用 readlines 方法按行读取文件内容并存储到列表中:
file = open('file.txt', 'r', encoding='utf-8')
lines = file.readlines()  # 将文件内容按行读取到一个列表中
for line in lines:
    print(line)
file.close()
使用迭代器遍历文件内容:
file = open('file.txt', 'r', encoding='utf-8')
for line in file:
    print(line)
file.close()

通过迭代器(for-in 循环),我们可以直接遍历文件对象,以逐行处理文件内容。

文件的写入

文件的写入

要将数据写入文件,可以使用 write 方法。打开文件时使用的模式应该为写入模式(w)。如果文件不存在,则会创建一个新文件;如果文件已存在,则会清空文件内容。

file = open('file.txt', 'w', encoding='utf-8')
file.write('Hello, World!')
file.close()

文件的追加

除了写入模式,还可以使用追加模式(a)向文件末尾添加内容。如果文件不存在,则会创建一个新文件。

file = open('file.txt', 'a', encoding='utf-8')
file.write('\nThis is a new line.')
file.close()

文件操作的综合案例

读取一个包含学生成绩的文件,并计算平均分和最高分。

file = open('grades.txt', 'r', encoding='utf-8')
total = 0
count = 0
highest = 0

# 遍历文件内容,逐行读取成绩
for line in file:
    # 去除每行首尾的空白字符并转换成整数
    grade = int(line.strip())
    total += grade
    count += 1
    if grade > highest:
        highest = grade

file.close()

# 计算平均分
average = total / count

print('Average:', average)
print('Highest grade:', highest)

案例中,假设 grades.txt 文件包含一些学生的成绩,每行一个。我们通过循环按行读取文件内容,并计算总分、学生人数和最高分,最后计算平均分和最高分。

文件的关闭

文件的关闭

打开文件后,应该在不再需要访问文件时将其关闭。这可以通过调用文件对象的 close 方法来实现。

file = open('file.txt', 'r')
# 文件操作...
file.close()

关闭文件是一个良好的编程习惯,可以释放系统资源并确保文件的正确关闭。

为了更方便地处理文件的打开和关闭,我们可以使用 with 语句来自动管理文件对象的生命周期。with 语句会在代码块结束时自动关闭文件,即使发生异常也可以正常关闭。

with open('file.txt', 'r') as file:
    # 文件操作...

文件的存在性检查

文件的存在性检查

在进行文件操作之前,有时候需要检查文件是否存在。可以使用 os.path 模块中的 exists 函数来判断文件是否存在。

import os

filename = 'file.txt'
if os.path.exists(filename):
    print('文件存在')
else:
    print('文件不存在')

异常处理

异常处理

在进行文件操作时,可能会遇到各种异常情况,比如文件不存在、权限错误等。为了增加程序的健壮性,我们可以使用异常处理机制来捕获和处理这些异常。

try:
    file = open('file.txt', 'r')
    # 文件操作...
except FileNotFoundError:
    print('文件不存在')
except PermissionError:
    print('权限错误')
finally:
    file.close()  # 确保文件被关闭

try 块中进行文件操作,如果出现指定的异常,就会转到对应的 except 块进行处理。无论是否发生异常,finally 块中的代码都会执行,用于确保文件的关闭。

文件操作的更多方法

除了基本的读写操作,Python 还提供了许多其他方法来处理文件,例如:

  • seek(offset[, whence]):移动文件指针到指定位置。
  • tell():返回当前文件指针的位置。
  • truncate(size):将文件截断为指定大小。

使用 with 语句进行文件写入

在这里插入图片描述

在前面提到的文件写入示例中,我们没有使用 with 语句。但是,为了更好地管理文件的生命周期,推荐使用 with 语句来打开文件并进行写入操作。

with open('file.txt', 'w', encoding='utf-8') as file:
    file.write('Hello, World!')

使用 with 语句打开文件后,可以直接在代码块中进行文件写入操作,无需显式调用 close 方法。

使用 try-except 处理文件读取异常

在读取文件时,可能会遇到一些异常情况,例如文件不存在或者无法访问。为了处理这些异常,可以使用 try-except 块来捕获并处理异常。

try:
    with open('file.txt', 'r', encoding='utf-8') as file:
        content = file.read()
except FileNotFoundError:
    print('文件不存在')
except PermissionError:
    print('权限错误')
else:
    print(content)

例子中,如果文件不存在或者出现权限错误,就会在相应的 except 块中执行相应的代码。如果没有出现异常,就会执行 else 块中的代码,输出文件内容。

使用 os 模块进行文件操作

Python 的内置模块 os 提供了许多功能强大的函数,用于进行文件和目录操作。下面是一些常用的 os 模块函数:

  • os.rename(src, dst):重命名文件或目录。
  • os.remove(path):删除文件。
  • os.mkdir(path):创建目录。
  • os.rmdir(path):删除目录。

这些函数可以在文件系统上进行更底层的操作,所以在使用之前需要谨慎考虑。

使用 shutil 模块进行文件操作

除了 os 模块外,Python 还提供了 shutil 模块,用于执行更高级别的文件和目录操作。该模块提供了许多方便的函数,例如复制文件、移动文件、递归地复制目录等。

import shutil

# 复制文件
shutil.copy('source.txt', 'destination.txt')

# 移动文件
shutil.move('old_location.txt', 'new_location.txt')

# 递归复制整个目录
shutil.copytree('source_dir', 'destination_dir')

shutil 模块的函数提供了更灵活和易于使用的方法,可以方便地进行文件和目录操作。

文件读取的其他方法

除了使用 read() 方法一次性读取整个文件内容之外,还可以使用其他方法来读取文件内容:

  • readline():逐行读取文件内容(每次读取一行)。
  • readlines():将文件内容按行读取并返回一个包含所有行的列表。
with open('file.txt', 'r', encoding='utf-8') as file:
    line = file.readline()
    while line:
        print(line)
        line = file.readline()

with open('file.txt', 'r', encoding='utf-8') as file:
    lines = file.readlines()
    for line in lines:
        print(line)

这些方法对于大型文件或需要逐行处理文件内容的场景非常有用。

文件追加写入

除了覆盖写入文件之外,还可以使用追加写入模式将内容添加到文件的末尾。只需将打开文件的模式设置为 'a' 即可。

with open('file.txt', 'a', encoding='utf-8') as file:
    file.write('追加的内容')

使用追加模式打开文件后,新写入的内容会添加到文件的末尾而不会覆盖原有内容。

文件的属性和信息

使用 os 模块可以获取文件的各种属性和信息,例如文件大小、创建时间、访问时间等。

import os

filename = 'file.txt'
size = os.path.getsize(filename)
creation_time = os.path.getctime(filename)

print(f'文件大小: {size} 字节')
print(f'创建时间: {creation_time}')

getsize() 方法返回文件的大小(以字节为单位),getctime() 方法返回文件的创建时间。

文件扩展名的处理

在这里插入图片描述

有时候需要获取文件的扩展名或修改文件的扩展名。可以使用 os.path 模块中的函数来实现。

import os

filename = 'file.txt'
extension = os.path.splitext(filename)[1]
new_filename = os.path.splitext(filename)[0] + '.new'  # 修改文件扩展名为 '.new'

print(f'文件扩展名: {extension}')
print(f'新文件名: {new_filename}')

splitext() 函数将文件名分割成文件名部分和扩展名部分,返回一个包含两个元素的元组。通过操作元组的元素,可以获取或修改文件的扩展名。

总结

python 知识点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/683153.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何下载外文文献,PubMed中的文献怎么获取

查找外文文献常用数据库有:PubMed、ScienceDirect、Wiley、Web of Science、EI等等。今天单独讲一下PubMed数据库文献的获取方法。 PubMed是生物医药领域使用最广泛的免费文献检索系统。但PubMed 的资讯并不包括期刊论文的全文,只是提供了指向全文提供者…

Meta Quest v55系统推送,浏览器支持多点触摸

6月25日青亭网报道,此前我们报道了Quest v55公测版系统更新解锁了GPU和CPU频率限制,以及动态分辨率渲染功能。 现在v55系统正式向所有人开启推送,并且加入了更多功能: 1,解锁GPU和CPU限制,支持动态分辨率渲…

Linux进程间通信——管道(上)

目录 前文 一,进程间通信介绍 二,什么是管道? 三,管道的基本原理 3.1 匿名管道 3.2 管道基本原理 四,样例代码 五,管道的读写规则 六,管道的特点 总结 前文 本文主要是讲解一下进程间…

一文告诉你低代码的价值

随着数字化时代的到来,软件开发已经成为企业不可或缺的一部分。然而,传统的软件开发过程往往缓慢而昂贵。由此,低代码开发平台的出现给企业带来了一种新的软件开发方式。在本文中,我们将探讨低代码开发平台的用处和发展史&#xf…

【数据分享】1929-2022年全球站点的逐年平均露点数据(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 对于具体到监测站点的气象数据,之前我们分享过1929-2022年全球气象…

centos7.x升级openeuler详细操作教程

本次升级使用工具为苏研提供 1. 升级前准备操作 1.1 注意事项 ● 迁移工具安装在辅助机中(不进行系统迁移的机器) ● 辅助机至少给迁移工具的安装预留 1.6G 内存空间 ● 安装之前需要关闭防火墙和 SELinux 的特殊要求 ● 工具安装环境需开启工具端口…

论文格式中要求作者加入orcid的链接在名字后边

论文格式中要求作者加入orcid的链接在名字后边,如下图: 使用网上给的各种写法会出现以下问题: (1)插入位置不合适 (2)出现一个正方形的框 (3)所有参考文献带框&#xff…

中国人民大学与加拿大女王大学金融硕士——努力必有回响,加油,金融人!

有付出,就会有收获;有努力,就会有回响。我们为梦想挥汗如雨,我们为未来奋力跋涉。金融领域在职读研的我们,突破了工作、生活等重围,进入到紧张学习的阶段,充分利用有限的时间完成自己蜕变&#…

微前端(micro-app)使用手册

转载请注明出处,点击此处 查看更多精彩内容 micro-app 使用手册 micro-app 是借鉴了 Web Component 的思想,通过 Custom Element 结合自定义的 Shadow Dom,将微前端封装成一个类 Web Component 组件,从而实现微前端的组件化渲染。…

项目集活动—项目集交付阶段活动

项目集交付阶段活动包括协调和管理项目集实际交付所需执行的项目集活动。这些活动包括围绕 变更控制、报告和信息发布所开展的活动,以及围绕成本、采购、质量和风险所开展的活动。 这些活动提供了贯穿整个项目集生命周期的支持活动和流程,旨在提供项目集…

第十三章 Transformer注意力机制

系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网络详解 第七章 MobileNetv2网络详解 第八章 MobileNetv3网络详解 第九章 ShuffleNetv1网络详解 第十章…

日志分析篇之Linux日志分析

0x00 前言 Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。 本文 简介一下Linux系统日志及日志分析技巧。 0x01 日志简介 日志默认存放位置:/var/log/ 查看日志配置情况:…

抖音本地生活林客服务商开通

抖音林客系统是一种面向本地生活服务的平台,它将消费者与商家联系在一起,在提供更便捷的服务的同时也创造了商业机会。考虑到目前互联网和移动设备的普及程度,以及人们对于生活质量和便利性的不断追求,抖音林客系统具有广阔的市场…

【AUTOSAR】AUTOSAR开发工具链(十)----基于BTC的MIL/SIL测试操作说明(2)

三、PowerWindow demon SIL测试 <一>、如果是手写的纯C代码使用方法如下 创建C代码工程文件 添加C代码的工程文件和不在一个文件夹的头文件路径 选择测试结构 接口参数格式定义 设置采样时间等于调度周期 点击import,添加测试用例类似于MIL测试 <二>、如果是模型…

小航助学2023年6月GESP_C++二级试卷(含题库答题软件账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 单选题2.0分 删除编辑附件图文 答案:D 第1题高级语言编写的程序需要经过以下&#xff08; &#xff09;操作&#xff0c;可以生成在…

这篇文章让你彻底了解什么是安全测试?

目录 前言 安全测试的验证点&#xff1a; 主要归结为以下几点&#xff1a;&#xff08;后期可以优化成一个安全测试的框架结构&#xff09; 总结&#xff1a; 前言 web应用无处不在&#xff0c;存在于每个行业&#xff0c;现在的发展速度非常快速&#xff0c;且web应用在软…

Jetpack Compose实现的一个优雅的 Toast 组件——简单易用~

Toast 是Android中常见的轻量级提示 本文将介绍如何使用Compose技术实现一个Toast组件 不是一个简单的toast 优雅-简洁-动画 才是我的风格 系统原生的Toast默认是在底部弹出&#xff0c;配合kotlin语音的特性&#xff0c;简单封装一下&#xff0c;使用方法非常简洁 inline …

CodeForces..好数列.[简单].[数学规律]

题目描述&#xff1a; 题目解读&#xff1a; 给定n&#xff0c;k 数组a是由0和1组成的&#xff0c;长度为n的数组&#xff0c;数组满足&#xff1a; a的前i个元素中至少有i/k个等于1&#xff1b; a的后i个元素中至少有i/k个等于1&#xff1b; 输入n,k 输出满足条件的数组的…

【JAVA】学生信息管理系统

目录 前言 一、环境搭建 二、功能实现 1.学生信息类的创建 2.学生信息的添加功能 3.学生信息的删除功能 4.学生信息的修改功能 5.学生信息的查看功能 三、主类的调用 1.界面的搭建 2.学生端和教师端 3.系统和功能的选择 总结 前言 JAVA实现的学生信息管理…

8.6 socket套接字及TCP的实现框架

socket套接字 目录 socket套接字 体系结构的两种形式 几种常见的网络编程接口 socket套接字 socket常用API介绍 socket套接字 三元组【IP地址&#xff0c;端口&#xff0c;协议】 地址族结构体 套接字类型 TCP通信的实现过程 体系结构的两种形式 网络的体系结构 (N…