18 Python如何操作文件?

news/2024/9/17 22:35:05/ 标签: python, 开发语言

本篇是 Python 系列教程第 18 篇,更多内容敬请访问我的 Python 合集

1 打开文件

通常使用内置的 open(文件路径, 模式, encoding="utf-8")函数。

  • 文件路径:可以是相对路径或绝对路径。
  • 模式:(可选)决定了文件打开后如何处理文件。
  • encoding:(可选)编码方式。

常见的模式有:

  • ‘r’ (默认):只读模式,如果文件不存在,则会引发 FileNotFoundError。
  • ‘w’:写入模式,如果文件存在则会清空内容再写入,如果文件不存在则创建新文件。
  • ‘a’:追加模式,在文件末尾追加内容,如果文件不存在则创建新文件。
  • ‘b’:二进制模式,用于处理二进制文件(如图像、音频等)。
  • ‘+’:更新模式,用于同时进行读写操作。

可以将这些模式组合起来使用,例如:

  • ‘rb’:以二进制模式读取文件。
  • ‘wb’:以二进制模式写入文件。
  • ‘ab’:以二进制模式追加内容到文件。
  • ‘r+’:读写模式,可以读取和写入文件。
  • ‘w+’:写入并读取模式,先写入后读取。
  • ‘a+’:追加并读取模式,先追加后读取。

2 文件读取

如果open()函数执行成功,会返回一个文件对象。后续可以对这个对象进行读取或写入操作。

python">f = open('./data.txt', 'r', encoding='utf-8')

文件对象有个read()方法,会一次性读取文件里的所有内容,并返回字符串格式。

实例:

python">file = open('data.txt', 'r', encoding="utf-8")
print(file.read())

注意:

  • 如果调用过read()后再次调用,会返回空,因为程序会记录文件被读取的位置,第一次read()时已经读到文件末尾,第二次read()后面就没有内容了。
  • 大文件也不适合用read(),因为会一次性读取文件的所有内容,可能挤爆内存。

上面说大文件不适合用read(),那有别的替换方案吗?当然有,解决方案就是一次性只读取部分内容,如:

  • read()传一个数字参数如read(1024),表示一次读多少字节,下次再调用read(1024)时就会继续从上次的结束位置读取。
  • 使用readline(),此方法一次只会读取一行内容,是根据换行符来判断本行结尾的,而且换行符也会被当做内容的一部分被读取。

上面的两种方式可搭配while循环来用,另外还有一个readlines()方法,会一次性返回所有行,组成一个字符串列表,一般搭配for循环使用。

3 文件写入

调用open()函数时第二个参数传wa就可以进行文件写入操作。这里说明一点,如果第二个参数是r,且文件不存在就会报FileNotFoundError错误,但是wa就不会报错,它会自动创建一个文件。

在打开或创建文件之后就可以调用文件对象的write()方法进行写入操作了。

示例:

python">with open('data.txt', 'w', encoding="utf-8") as file:file.write("hello ")file.write("python")

data.txt内容:

python">hello python

注意write()方法并不会自动换行,需要手动添加换行符,如把代码改成file.write("hello\n"),data.txt就会变成:

python">hello
python

如果我们使用w模式,文件就只能写入不能读取,如果我们想先读取再写入,可以用r+模式

4 关闭文件

文件操作完毕后,文件对象需要调用一个close()方法关闭文件释放资源。

每次文件操作完毕后都应该关闭文件,但是有可能会粗心忘记关闭,怎么办呢?我们可以在调用open()函数打开文件的时候使用with关键字,然后用as指定读取到的文件,这样在with代码块执行完后文件就会被自动关闭了,实例:

python"># 使用 with 语句来读取文件
with open('data.txt', 'r', encoding='utf-8') as file:for line in file.readlines():print(line.strip())

http://www.ppmy.cn/news/1524608.html

相关文章

【mysql】mysql修改sql_mode之后无法启动

现象:修改后mysql无法启动,不报错 原因:MySQL在8以后sql_mode已经取消了NO_AUTO_CREATE_USER这个关键字。去掉这个关键字后,启动就可以了 修改前: sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR…

AI prompt(提示词)

# 好用的用于学习的AI提示词 ## 费曼学习法 请使用费曼学习法,用简单的语言解释(量子力学)是什么,并提供一个简单的例子来说明它如何应用 ## 帕累托法则(80/20原则) 将(量子力学)最…

基于亲和性的 GPU 容器绑核策略 Copy

1.引言 在高性能计算和大规模并行任务处理中,GPU已经成为不可或缺的加速器。为了充分发挥GPU的计算能力,通过合理分配CPU核与GPU的绑定来优化CPU和GPU的关系至关重要。我们将探讨socket和NUMA(非统一内存访问)的概念,并…

如何安全,高效,优雅的提升linux的glibc版本

如何安全,高效,优雅的提升linux的glibc版本 一、发现问题二、升级glibc版本1. 下载对应的软件包2. 解压软件包3. 查看新版本glibc安装要求,并查看自己版本是否符合需求4. 升级python版本4.1 下载软件包4.2 解压4.3 编译4.4 确认更新后的pytho…

最佳实践-模板设计模式

目录 一、什么是设计模式 二、模板设计模式-介绍 三、模板设计模式-最佳实践 1、开发需求 2、使用传统的方法来解决 3、优化-使用模板设计模式来解决 一、什么是设计模式 1)设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题…

计算机毕业设计PySpark+Django深度学习游戏推荐系统 游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设

在撰写《PySparkDjango深度学习游戏推荐系统》的开题报告时,建议包括以下内容: ### 1. 研究背景与意义 在数字娱乐行业中,游戏推荐系统成为提升用户体验的关键工具。现有的推荐系统大多基于用户行为数据进行推荐,但随着数据量的急…

php实现Socket 编程

在PHP中,Socket编程主要使用一系列内置函数来实现。下面通过一个简单的TCP服务器和客户端的例子来演示如何使用PHP进行Socket编程。 PHP中的Socket函数 PHP 提供了一些用于Socket编程的函数,包括: socket_create():创建一个新的…

装杯 之 Linux 指令1

hello,欢迎来到linux世界,在害没有学习linux时,看到别人操作,网课,真高级,感觉好厉害,就是说白了,看起来牛逼。ok,接下来,请大佬们进入linux之旅。 1.ls指令…

淘宝/天猫按图搜索淘宝商品(拍立淘) API 返回值说明

item_search_img-按图搜索淘宝商品(拍立淘) taobao.item_search_img 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中…

kubeadm 初始化 k8s 证书过期解决方案

概述 在使用 kubeadm 初始化的 Kubernetes 集群中,默认情况下证书的有效期为一年。当证书过期时,集群中的某些组件可能会停止工作,导致集群不可用。本文将详细介绍如何解决 kubeadm 初始化的 Kubernetes 集群证书过期的问题,并提…

数据结构之红黑树的 “奥秘“

目录: 一.红黑树概念 二. 红黑树的性质 三.红黑树的实现 四.红黑树验证 五.AVL树和红黑树的比较 一.红黑树概念 1.红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何 一条从根…

小阿轩yx-Zabbix企业级分布式监控环境部署

小阿轩yx-Zabbix企业级分布式监控环境部署 前言 “运筹帷幄之中,决胜千里之外”监控在 IT 运维中占据着重要地位,按比例说占 30% 也不为过在监控系统开源软件中有很多可选择的工具,但是真正符合要求的、能够真正解决业务问题的监控系统软件…

如何阅读PyTorch文档及常见PyTorch错误

如何阅读PyTorch文档及常见PyTorch错误 文章目录 如何阅读PyTorch文档及常见PyTorch错误阅读PyTorch文档示例常见Pytorch错误Tensor在不同设备上维度不匹配cuda内存不足张量类型不匹配 参考 PyTorch文档查看https://pytorch.org/docs/stable/ torch.nn -> 定义神经网络 torc…

【C++】auto的解释

auto 是 C 中的类型推断关键字。它让编译器自动推导变量的类型。使用 auto 可以使代码更简洁,尤其在处理复杂类型时特别有用。 auto 提高了代码的灵活性和可读性,特别是在类型复杂或需要保持一致性的情况下。 主要用法: 1.自动推导类型: …

手写call、apply、bind

一、手写call const person {name:zhangsan} function foo(numA,numB){console.log(this)console.log(numA,numB)return numA numB }// 手写call Function.prototype.mycall function(thisArg,...args){ // 手写callconst key Symbol(key) // 唯一标识符thisArg[key] thi…

小程序的右侧抽屉开关动画手写效果

<template><view><button click"openDrawer">打开抽屉</button><view v-if"showDrawer" class"drawer" :style"{ backgroundColor: bgColor }" click"closeDrawer"><view class"draw…

docker 重启容器且修改服务映射端口

要重启 Docker 容器并修改服务的映射端口,可以按照以下步骤进行操作: 1. 停止当前运行的容器 如果你想重新配置端口,通常需要先停止当前运行的容器。你可以使用以下命令停止容器: docker stop <container_name_or_id>2. 删除现有容器 为了修改端口映射,你需要删…

AI应用 | 超好玩的“汉语新解“ - 文末有Prompt

最近群里玩“汉语新解”的文字卡片贼多 感觉很新颖 本来AI是无法生成固定的图的 但是使用html格式&#xff0c;来生成固定图片的想法还是很不错的 看看效果 使用很简单 把提示词喂给Ai即可 随便一个大模型都可以&#xff0c;比如ChatGPT、通义千问、kimi等等 提示词(Prompt)如下…

关于linux里的df命令以及inode、数据块-stat链接数以及关于awk文本处理命令中内置函数sub、gsub、sprintf

一、关于linux里的df命令以及inode、数据块-stat链接数 Linux中df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计&#xff0c;平常这个命令也用得很多&#xff0c;但一般就是使用df -h查看各个分区的空间使用情况&#xff0c;除此外也可以使用df查看当前linux系统…

多张GPU卡

from transformers import pipeline from accelerate import init_empty_weights, infer_auto_device_map from transformers import AutoModelForCausalLM, AutoTokenizer 初始化加速器 from accelerate import Accelerator accelerator Accelerator() 加载模型和 tokeni…