当前位置: 首页 > news >正文

Python 文件 I/O 入门指南

Python 文件 I/O 入门指南

文章目录

  • Python 文件 I/O 入门指南
    • 一、文件的打开与关闭
    • 二、文件的读取
    • 三、文件的写入
    • 四、文件的定位
    • 五、文件的属性
    • 六、处理不同类型的文件
    • 七、错误处理
    • 八、总结

在 Python 编程中,文件输入输出(I/O)是一项非常重要的技能。无论是读取配置文件、处理数据文件,还是将结果写入文件,都需要用到文件 I/O 操作。本文将为你提供一份详细的 Python 文件 I/O 入门指南,帮助你轻松掌握这一关键技能。

一、文件的打开与关闭

  1. 打开文件
    • 使用open()函数可以打开一个文件。该函数接受两个参数:文件名和模式。文件名是要打开的文件的名称,可以是相对路径或绝对路径。模式指定了打开文件的方式,例如读取、写入或追加。
    • 以下是一些常见的文件打开模式:
      • 'r':以只读模式打开文件。如果文件不存在,会抛出FileNotFoundError异常。
      • 'w':以写入模式打开文件。如果文件不存在,会创建一个新文件。如果文件已存在,会清空文件内容。
      • 'a':以追加模式打开文件。如果文件不存在,会创建一个新文件。如果文件已存在,会在文件末尾追加内容。
      • 'b':以二进制模式打开文件。可以与其他模式结合使用,例如'rb'表示以二进制只读模式打开文件。
    • 例如,以下代码以只读模式打开一个名为example.txt的文件:
file = open('example.txt', 'r')
  1. 关闭文件
    • 打开文件后,一定要记得关闭文件,以释放资源。可以使用close()方法来关闭文件。
    • 例如:
file = open('example.txt', 'r')
# 对文件进行操作
file.close()
  • 为了确保文件在使用后被正确关闭,也可以使用with语句。with语句会在代码块执行完毕后自动关闭文件,即使在代码块中发生了异常。
  • 例如:
with open('example.txt', 'r') as file:# 对文件进行操作

二、文件的读取

  1. 读取整个文件
    • 可以使用read()方法读取整个文件的内容。该方法返回一个字符串,包含文件中的所有内容。
    • 例如:
with open('example.txt', 'r') as file:content = file.read()print(content)
  1. 逐行读取文件
    • 可以使用readline()方法逐行读取文件的内容。该方法每次返回一行内容,包括换行符。
    • 例如:
with open('example.txt', 'r') as file:line = file.readline()while line:print(line)line = file.readline()
  • 也可以使用readlines()方法一次性读取文件的所有行,并将它们存储在一个列表中。
  • 例如:
with open('example.txt', 'r') as file:lines = file.readlines()for line in lines:print(line)

三、文件的写入

  1. 写入字符串
    • 可以使用write()方法将字符串写入文件。如果文件以写入模式或追加模式打开,新的内容将被添加到文件中。
    • 例如:
with open('example.txt', 'w') as file:file.write('Hello, world!')
  1. 写入多行内容
    • 可以使用writelines()方法将一个字符串列表写入文件。每个字符串代表一行内容,不会自动添加换行符。
    • 例如:
lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']
with open('example.txt', 'w') as file:file.writelines(lines)

四、文件的定位

  1. 获取当前位置
    • 可以使用tell()方法获取文件指针的当前位置。文件指针指示了下一次读取或写入操作将发生的位置。
    • 例如:
with open('example.txt', 'r') as file:position = file.tell()print(position)
  1. 移动文件指针
    • 可以使用seek()方法移动文件指针到指定的位置。该方法接受两个参数:偏移量和起始位置。起始位置可以是0(文件开头)、1(当前位置)或2(文件末尾)。
    • 例如:
with open('example.txt', 'r') as file:file.seek(10, 0)  # 移动到文件开头后 10 个字节的位置content = file.read()print(content)

五、文件的属性

  1. 文件名
    • 可以使用name属性获取文件的名称。
    • 例如:
with open('example.txt', 'r') as file:print(file.name)
  1. 文件模式
    • 可以使用mode属性获取文件的打开模式。
    • 例如:
with open('example.txt', 'r') as file:print(file.mode)
  1. 文件是否已关闭
    • 可以使用closed属性判断文件是否已关闭。如果文件已关闭,该属性返回True;否则,返回False
    • 例如:
with open('example.txt', 'r') as file:print(file.closed)
file.close()
print(file.closed)

六、处理不同类型的文件

  1. 文本文件
    • 文本文件是最常见的文件类型,通常包含人类可读的文本内容。在 Python 中,可以使用默认的文本模式('r''w''a')来处理文本文件。
    • 例如,读取一个文本文件并打印其中的内容:
with open('example.txt', 'r') as file:content = file.read()print(content)
  • 写入一个文本文件:
with open('example.txt', 'w') as file:file.write('Hello, world!')
  1. 二进制文件
    • 二进制文件包含二进制数据,如图像、音频、视频文件等。在 Python 中,可以使用二进制模式('rb''wb''ab')来处理二进制文件。
    • 例如,读取一个二进制文件并打印其中的内容:
with open('example.jpg', 'rb') as file:content = file.read()print(content)
  • 写入一个二进制文件:
with open('example.jpg', 'wb') as file:file.write(binary_data)

七、错误处理

  1. 文件不存在
    • 如果尝试打开一个不存在的文件,会抛出FileNotFoundError异常。可以使用try-except语句来捕获这个异常并进行相应的处理。
    • 例如:
try:with open('nonexistent.txt', 'r') as file:content = file.read()print(content)
except FileNotFoundError:print('File not found.')
  1. 权限错误
    • 如果尝试以不适当的权限打开文件,会抛出PermissionError异常。同样,可以使用try-except语句来捕获这个异常并进行相应的处理。
    • 例如:
try:with open('protected.txt', 'r') as file:content = file.read()print(content)
except PermissionError:print('Permission denied.')

八、总结

Python 的文件 I/O 操作提供了丰富的功能,可以方便地处理各种类型的文件。在使用文件 I/O 时,要注意正确地打开和关闭文件,选择合适的文件模式,以及处理可能出现的错误。通过掌握这些基本技能,你可以在 Python 编程中更加高效地处理文件数据。

相关文章:

Python 文件 I/O 入门指南

Python 文件 I/O 入门指南 文章目录 Python 文件 I/O 入门指南一、文件的打开与关闭二、文件的读取三、文件的写入四、文件的定位五、文件的属性六、处理不同类型的文件七、错误处理八、总结 在 Python 编程中,文件输入输出(I/O)是一项非常重…...

Atlas800昇腾服务器(型号:3000)—YOLO全系列NPU推理【检测】(五)

服务器配置如下: CPU/NPU:鲲鹏 CPU(ARM64)A300I pro推理卡 系统:Kylin V10 SP1【下载链接】【安装链接】 驱动与固件版本版本: Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run【下载链接】 Ascend-…...

1.2.3 TCP IP模型

TCP/IP模型(接网叔用) 网络接口层 网络层 传输层 应用层 理念:如果某些应用需要“数据格式转换”“会话管理功能”,就交给应用层的特定协议去实现 tip:数据 局部正确不等于全局正确 但是,数据的 全局正…...

选择、冒泡和插入排序及其优化版本课件

视频链接:是趣味编程的个人空间-是趣味编程个人主页-哔哩哔哩视频...

Matlab自学笔记三十九:日期时间型数据的算术运算:加减运算

1.说明 时间点和(日历)持续时间是可加的,结果是时间点;两个时间点是可减的,结果是持续时间,用时分秒表示;时间型和浮点数运算,结果是时间型,浮点数默认单位是天&#xf…...

Java-多线程2

什么是线程? 线程是 cpu调度和执行的单位。 多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈。 如何实现线程 继承Thread类 实现步骤: 创建自定义类,继承Thread类 重写run方法 创建自定…...

POWER_CONMETRICS的packet wakeup events触发条件的代码走读

摘要: adb shell dumpsys connmetrics 的packet wakeup events触发条件:首先App是无法控制packet wakeup events的事件日志打印,主要App联网过程中网络状态或配置发生变化时由系统netd自动触发的统计。 通俗理解:目前主要表示触…...

Bug:通过反射修改@Autowired注入Bean的字段,明确存在,报错 NoSuchFieldException

【BUG】通过Autowired注入了一个Bean SeqNo,测试的时候需要修改其中的字段。通过传统的反射,无论如何都拿不到信息,关键是一方面可以通过IDEA跳转,一方面debug也确实能看到这个字段。但是每次调用set方法报错:NoSuchFi…...

Vue项目兼容IE11

配置Vue项目兼容IE11详解 Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性。但对于 IE9,Vue 底层是支持。 由于开发过程中,我们经常会使用一些第三方插件或组件,对于这些组件,有时我们…...

可以帮助你快速禁用windows自带的防火墙程序defender control,有效解决占用内存大的问题,供大家学习研究参考

可以关闭windows自带的windows defender防火墙的工具,defender control官方版界面小巧,功能强大,当大家需要手动关闭或禁用windows defender时,就可以使用这款软件,以此来一键关闭或开启这个烦人的系统防火墙。操作起来也非常的简单便捷。 defender control怎么使用 下载…...

2024年9月电子学会Scratch图形化编程等级考试二级真题试卷

2024.09 Scratch图形化编程等级考试二级真题试卷 题目总数:37 总分数:100 一、选择题 第 1 题 Scratch小猫初始坐标是(50,50),小猫向下移动100步后的坐标是?( ) A.(150,50) B.(-50,50) C.(50,-50) D.(50,1…...

STL-vector+题目

vector-顺序表&#xff0c;可以存放任意类型的数据。 vector在[ ]和迭代器、范围for方面的使用差不多一样。 vector的迭代器有普通的还有const类型的迭代器。 vector使用下标[ ]好用。迭代器是容器通用的访问方式&#xff0c;使用方法基本相似。 #include <iostream> #i…...

微服务--Gateway网关--全局Token过滤器【重要】

全局过滤器 GlobalFilter&#xff0c; 注入到 IOC里面即可 概念&#xff1a; 全局过滤器&#xff1a; 所有的请求 都会在执行链里面执行这个过滤器 如添加日志、鉴权等 创建一个全局过滤器的基本步骤&#xff1a; 步骤1: 创建过滤器类 首先&#xff0c;创建一个实现了Globa…...

负载均衡在线判题系统【项目】

项目介绍 本项目是一个负载均衡的在线判题系统 (Online Judge, OJ) 的简易实现。该系统的核心功能是处理大量编程问题的提交&#xff0c;并通过负载均衡的机制&#xff0c;分配判题任务到多台服务器上&#xff0c;确保高效和可靠的评测。系统通过自动选择负载较低的服务器进行…...

重构复杂简单变量之用子类替换类型码

子类替换类型码 是一种用于将类型码替换为子类。当代码使用类型码&#xff08;通常是 int、string 或 enum&#xff09;来表示对象的不同类别&#xff0c;并且这些类别的行为有所不同时&#xff0c;使用子类可以更加清晰地表达这些差异并减少复杂的条件判断。 一、什么时候使用…...

【Nginx系列】Nginx配置超时时间

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

2024年龙信

挂载VC的密码&#xff1a;MjAyNOmmeS/oeadrw 手机取证 1. Android 设备在通过 ADB 连接时&#xff0c;通常会要求用户授权连接&#xff0c;会要求用户确认设备授权&#xff0c;并将该设备的公钥保存在 adb_keys文件中 寻找到data/misc/adb/adb_keys下面有中有两个&#xff0c;…...

PyCharm配置Flask开发环境

文章目录 一、步骤1.安装虚拟环境2.创建虚拟环境文件夹3.安装虚拟环境目录4.进入虚拟环境5.active命令 激活6.安装Flask7.在Pycharm中配置Flask环境 总结 一、步骤 1.安装虚拟环境 代码如下&#xff08;示例&#xff09;&#xff1a; pip install virtualenv 或者 pip insta…...

【人工智能-初级】第2章 机器学习入门:从线性回归开始

文章目录 一、什么是线性回归&#xff1f;二、线性回归的基本概念2.1 一元线性回归2.2 多元线性回归 三、如何进行线性回归建模&#xff1f;四、用Python实现线性回归4.1 导入必要的库4.2 创建虚拟数据集4.3 数据可视化4.4 拆分训练集和测试集4.5 训练线性回归模型4.6 查看模型…...

SPOOLing技术详解,结合实际场景让你了解什么是假脱机技术。

SPOOLing技术 ​ 在手工操作阶段&#xff0c;主机直接从I/O设备获取数据&#xff0c;但是由于设备速度很慢&#xff0c;主机速度很快。人机速度矛盾明显&#xff0c;主机需要浪费很多时间来等待设备。 什么是脱机技术&#xff0c;脱机技术可以解决什么问题&#xff1f; 所谓脱…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...