Python入门(8):文件

1. 文件基本概念

文件:存储在计算机上的数据集合,Python 通过文件对象来操作文件。

文件类型

  • 文本文件:由字符组成,如 .txt, .py

  • 二进制文件:由字节组成,如 .jpg, .mp3

2. 文件打开与关闭

2.1 open() 函数

# 打开文件的基本语法
file = open('example.txt', 'r')  # 'r'表示读取模式
file.close()  # 关闭文件

2.2 文件打开模式

模式描述
'r'只读(默认)
'w'写入(会覆盖)
'a'追加
'x'创建新文件
'b'二进制模式
't'文本模式(默认)
'+'读写模式
# 使用 with 语句自动管理文件(推荐)
with open('example.txt', 'r') as file:content = file.read()  # 读取文件内容
# 离开 with 块后文件自动关闭

3. 文件读取方法

3.1 读取整个文件

with open('example.txt', 'r') as file:content = file.read()  # 读取全部内容为字符串print(content)

3.2 逐行读取

# 方法1:使用 readline()
with open('example.txt', 'r') as file:line = file.readline()  # 读取一行while line:print(line.strip())  # strip() 去除换行符line = file.readline()# 方法2:使用 readlines()
with open('example.txt', 'r') as file:lines = file.readlines()  # 读取所有行到列表for line in lines:print(line.strip())# 方法3:直接迭代文件对象(推荐)
with open('example.txt', 'r') as file:for line in file:  # 逐行迭代print(line.strip())

4. 文件写入方法

4.1 写入字符串

# 写入模式(会覆盖原文件)
with open('output.txt', 'w') as file:file.write("Hello, World!\n")  # 写入字符串file.write("This is a new line.\n")# 追加模式
with open('output.txt', 'a') as file:file.write("This line will be appended.\n")

4.2 写入多行

lines = ["First line\n", "Second line\n", "Third line\n"]
with open('output.txt', 'w') as file:file.writelines(lines)  # 写入多行

5. 文件位置操作

with open('example.txt', 'rb') as file:  # 二进制模式才能使用 seek()print(file.tell())  # 获取当前文件位置(字节偏移量)content = file.read(10)  # 读取10个字节print(content)file.seek(5)  # 移动到第5个字节print(file.read(5))  # 读取接下来的5个字节

6. 二进制文件操作

# 读取二进制文件
with open('image.jpg', 'rb') as file:data = file.read()  # 读取二进制数据# 写入二进制文件
with open('copy.jpg', 'wb') as file:file.write(data)  # 写入二进制数据

7. 文件与目录操作(os 模块)

import os# 检查文件/目录是否存在
print(os.path.exists('example.txt'))  # True/False# 获取文件大小
print(os.path.getsize('example.txt'))  # 字节数# 重命名文件
os.rename('old.txt', 'new.txt')# 删除文件
os.remove('file_to_delete.txt')# 目录操作
os.mkdir('new_dir')  # 创建目录
os.rmdir('empty_dir')  # 删除空目录

8. 文件路径操作(os.path 模块)

import os.path# 获取绝对路径
print(os.path.abspath('example.txt'))# 检查是否为文件/目录
print(os.path.isfile('example.txt'))  # True
print(os.path.isdir('example.txt'))  # False# 路径拼接
print(os.path.join('folder', 'subfolder', 'file.txt'))# 获取文件名和扩展名
print(os.path.basename('/path/to/file.txt'))  # 'file.txt'
print(os.path.splitext('file.txt'))  # ('file', '.txt')

9. 临时文件(tempfile 模块)

import tempfile# 创建临时文件
with tempfile.NamedTemporaryFile(delete=False) as temp_file:temp_file.write(b"Temporary data")  # 写入临时数据temp_path = temp_file.name  # 获取临时文件路径print(f"临时文件路径: {temp_path}")# 临时文件会在关闭后自动删除(除非设置 delete=False)

10. 文件编码处理

# 指定编码方式(推荐)
with open('example.txt', 'r', encoding='utf-8') as file:content = file.read()# 处理编码错误
try:with open('example.txt', 'r', encoding='utf-8') as file:content = file.read()
except UnicodeDecodeError:print("文件编码不匹配!")# 写入时指定编码
with open('output.txt', 'w', encoding='utf-8') as file:file.write("包含中文的内容")

11. CSV 文件处理

import csv# 读取CSV文件
with open('data.csv', 'r', encoding='utf-8') as file:reader = csv.reader(file)for row in reader:print(row)  # 每行是一个列表# 写入CSV文件
data = [['Name', 'Age'], ['Alice', 25], ['Bob', 30]]
with open('output.csv', 'w', encoding='utf-8', newline='') as file:writer = csv.writer(file)writer.writerows(data)  # 写入多行

12. JSON 文件处理

import json# 写入JSON文件
data = {'name': 'Alice', 'age': 25, 'skills': ['Python', 'Java']}
with open('data.json', 'w', encoding='utf-8') as file:json.dump(data, file, indent=4)  # indent参数美化输出# 读取JSON文件
with open('data.json', 'r', encoding='utf-8') as file:loaded_data = json.load(file)print(loaded_data['name'])  # Alice

13. 文件操作最佳实践

  1. 始终使用 with 语句管理文件资源

  2. 明确指定文件编码(特别是处理文本时)

  3. 处理大文件时使用迭代方式而非一次性读取

  4. 检查文件/目录是否存在再进行操作

  5. 合理处理文件操作可能引发的异常

  6. 使用 os.path 进行路径操作而非字符串拼接

  7. 敏感操作前对数据做好备份

14. 常见文件操作异常处理

try:with open('nonexistent.txt', 'r') as file:content = file.read()
except FileNotFoundError:print("文件不存在!")
except PermissionError:print("没有文件访问权限!")
except IOError as e:print(f"文件操作错误: {e}")
finally:print("操作结束")

如果您觉得本文章对您有帮助,别忘了点赞、收藏加关注,更多干货内容将持续发布,您的支持就是作者更新最大的动力。本专栏将持续更新,有任何问题都可以在评论区讨论

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

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

相关文章

市场交易策略优化与波动管理

市场交易策略优化与波动管理 在市场交易中,策略的优化和波动的管理至关重要。市场价格的变化受多种因素影响,交易者需要根据市场环境动态调整策略,以提高交易的稳定性,并有效规避市场风险。 一、市场交易策略的优化方法 趋势交易策…

HTTP数据传输的几个关键字Header

本文着重针对http在传输数据时的几种封装方式进行描述。 1. Content-Type(描述body内容类型以及字符编码) HTTP的Content-Type用于定义数据传输的媒体类型(MIME类型),主要分为以下几类: (一)、‌基础文本类型‌ text/plain‌ …

面向教育领域的实时更新RAG系统:核心模块设计与技术选型实践指南

目录 面向教育领域的实时更新RAG系统:核心模块设计与技术选型实践指南 一、业务需求分析 二、系统架构设计(核心模块) 三、核心模块详解与技术选型建议 (一)实时更新向量知识库 (二)教材与…

k8s patch方法更新deployment和replace方法更新deployment的区别是什么

在Kubernetes中,patch 和 replace 方法用于更新资源(如 Deployment),但它们的实现方式和适用场景有显著差异。以下是两者的核心区别: 1. 更新范围 replace 方法 完全替换整个资源配置。需要用户提供完整的资源定义&…

解决安卓手机WebView无法直接预览PDF的问题(使用PDF.js方案)

在移动端开发中,通过 webview 组件直接加载PDF文件时,不同平台的表现差异较大: iOS & 部分安卓浏览器:可正常内嵌预览(依赖系统内置PDF渲染能力) 大多数安卓设备:由于缺乏原生PDF插件&…

基于javaweb的SSM+Maven机房管理系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

7-6 混合类型数据格式化输入

本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。 输入格式: 输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。 输出格式: 在一行中…

【GPIO8个函数解释】

函数解释 void GPIO_DeInit(GPIO_TypeDef* GPIOx); 作用:将指定GPIO端口的所有寄存器恢复为默认值。这会清除之前对该端口的所有配置,使其回到初始状态。使用方法:传入要复位的GPIO端口指针,例如GPIOA、GPIOB等。 void GPIO_AF…

将图表和表格导出为PDF的功能

<template><div><divref"pdfContent"style"position: relative; width: 800px; margin: 0 auto"><!-- ECharts 图表 --><div id"chart" style"width: 100%; height: 400px" /><!-- Element UI 表格 …

C++中的链表操作

在C中&#xff0c;链表是一种常见的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含数据部分和指向下一个节点的指针。C标准库&#xff08;STL&#xff09;中提供了std::list和std::forward_list两种链表实现&#xff0c;分别对应双向链表和单向链表。此外&am…

蛋白设计 ProteinMPNN

传统方法的局限性是什么&#xff1f; 传统蛋白质设计方法的局限性&#xff1a; 基于物理的传统方法&#xff0c;例如罗塞塔&#xff0c;面临计算难度&#xff0c;因为需要计算所有可能结构的能量&#xff0c;包括不需要的寡聚态和聚合态。 设计目标与显式优化之间缺乏一致性通…

有哪些开源的视频生成模型

1. 阿里巴巴通义万相2.1&#xff08;WanX 2.1&#xff09; 技术架构&#xff1a;基于Diffusion Transformer&#xff08;DiT&#xff09;架构&#xff0c;结合自研的高效变分自编码器&#xff08;VAE&#xff09;和Flow Matching训练方案&#xff0c;支持时空上下文建模。参数…

【动态规划】最长上升子序列模板

最长上升子序列 题目传送门 一、题目描述 给定一个长度为 N 的数列&#xff0c;求数值严格单调递增的子序列的长度最长是多少。 输入格式 第一行包含整数 N。 第二行包含 N 个整数&#xff0c;表示完整序列。 输出格式 输出一个整数&#xff0c;表示最大长度。 数据范围 …

LeetCode 891 -- 贡献度思想

题目描述 子序列宽度之和 思路 ref 代码 相似题 子数组范围和 acwing

化工行业如何通过定制化工作流自动化实现25-30%成本优化?

作者&#xff1a;Mihir Jhaveri 编译&#xff1a;李升伟 发布日期&#xff1a;2024年10月30日 在化工生产领域&#xff0c;数字化转型正以颠覆性态势重塑产业格局。通过集成定制化软件、ERP系统、工业物联网&#xff08;IIoT&#xff09;传感网络、机器人流程自动化&#xff0…

Compose组件转换XML布局

文章目录 学习JetPack Compose资源前言&#xff1a;预览界面的实现Compose组件的布局管理一、Row和Colum组件&#xff08;LinearLayout&#xff09;LinearLayout&#xff08;垂直方向 → Column&#xff09;LinearLayout&#xff08;水平方向 → Row&#xff09; 二、相对布局 …

RAG测试数据集资源

一、通用问答基准数据集 HotpotQA 特点:包含11万+多跳问答对最佳用途:测试复杂推理能力数据示例:{"question": "Were Scott Derrickson and Ed Wood of the same nationality?","answer": "Yes, both are American" }MS MARCO 特点…

快速掌握MCP——Spring AI MCP包教包会

最近几个月AI的发展非常快&#xff0c;各种大模型、智能体、AI名词和技术和框架层出不穷&#xff0c;作为一个业余小红书博主的我最近总刷到MCP这个关键字&#xff0c;看着有点高级我也来学习一下。 1.SpringAI与functionCall简单回顾 前几个月我曾写过两篇关于SpringAI的基础…

学习笔记--(6)

import numpy as np import matplotlib.pyplot as plt from scipy.special import erfc# 设置参数 rho 0.7798 z0 4.25 # 确保使用大写 Z0&#xff0c;与定义一致def calculate_tau(z, z_prime, rho, s_values):return np.log(rho * z * z_prime * s_values / 2)# 定义 chi_…

【AI4CODE】5 Trae 锤一个基于百度Amis的Crud应用

【AI4CODE】目录 【AI4CODE】1 Trae CN 锥安装配置与迁移 【AI4CODE】2 Trae 锤一个 To-Do-List 【AI4CODE】3 Trae 锤一个贪吃蛇的小游戏 【AI4CODE】4 Trae 锤一个数据搬运工的小应用 1 百度 Amis 简介 百度 Amis 是一个低代码前端框架&#xff0c;由百度开源。它通过 J…