10 Python的文件操作

概述

        在上一节,我们介绍了Python的推导式,包括:列表推导式、元组推导式、集合推导式、字典推导式、条件推导式等内容。在这一节中,我们将介绍Python的文件操作。Python是一种高级编程语言,它提供了许多内置函数和模块来处理文件操作,主要包括:打开文件、读取文件、写入文件、关闭文件、获取目录列表等。

打开文件

        在Python中,可以使用open()函数来打开一个文件。该函数通常接受两个参数:文件路径和打开模式。

        打开文件的常见模式有如下几种:

        'r':只读模式。

        'w':写入模式。如果文件存在,将其截断为空文件;如果文件不存在,则创建一个新文件。

        'a':追加模式。如果文件存在,将新数据追加到文件的末尾;如果文件不存在,则创建一个新文件。

        'x':创建模式。创建一个新文件,如果文件已存在,则失败。

        't':文本模式,不指定模式时的默认值。

        'b':二进制模式。使用带有'b'标记的打开模式(比如:'rb'、'wb'),可以以二进制模式读取和写入文件,这在处理图像、视频、音频和其他非文本文件时很有用。

# 打开名为text.txt的文件以进行读取
file = open('text.txt', 'r')

读取文件

        打开文件后,可以使用read()函数来读取文件的内容。该函数接受一个可选参数,表示要读取的最大字符数。另外,还可以使用readline()函数一次读取一行,使用readlines()函数一次读取所有行并返回一个列表。

# 打开名为text.txt的文件以进行读取
file = open('text.txt', 'r')
# 读取整个文件内容  
content = file.read()
# 最多读取100个字符  
content = file.read(100)
# 读取一行内容
content = file.readline()
# 读取所有行内容,并返回一个列表
content = file.readlines()
# 使用完需要关闭文件
file.close()

写入文件

        要向文件中写入内容,可以使用write()函数。该函数接受一个字符串参数,表示要写入的内容。也可以使用writelines()函数,该函数接受一个字符串序列,但不会自动添加换行符,需要手动添加。

# 打开名为text.txt的文件以进行读取
file = open('text.txt', 'w')
# 写入字符串内容
file.write('hello CSDN\n')
# 写入列表,writelines不会自动添加换行符,需要手动添加
lines = ['first line', 'second line', 'third line']
file.writelines('\n'.join(lines))
file.close()

关闭文件

        使用完文件后,应记得使用close()函数来关闭文件。这是一个良好的编程习惯,因为它可以释放占用的系统资源,并避免出现异常或错误。

        实际上,上述几个示例代码都不够完善,因为open()函数在失败时,会抛出OSError异常。比较规范的写法可以参考下面的示例代码。

file = None
try:file = open('text.txt', 'r')print(file.readline())
except OSError as error:print(error)
finally:if file:file.close()

        但如果每次读写文件时,都这样编码,太繁琐了。因此,Python提供了with语句。with语句用于处理文件对象,以确保文件在使用后被正确地关闭。这是一种处理文件的推荐方式,因为它可以自动管理文件的打开和关闭,从而避免资源泄漏。

        当你使用with语句处理文件时,Python会在代码块结束时自动关闭文件,无论中间是否发生异常。这使得代码更加简洁和安全,因为你不必担心忘记关闭文件。

try:with open('text.txt', 'r') as file:content = file.read()print(content)
except:print('open exception')

        在上面的示例代码中,我们使用open()函数打开了一个名为'text.txt'的文件,并将其赋值给变量file。然后,使用with语句将文件包裹起来。在with代码块中,我们读取了文件的内容并将其存储在变量content中,然后打印出来。当代码块结束时,Python会自动关闭文件,无论中间是否发生异常。

        另外,还可以使用with语句来处理其他类型的资源,比如:网络连接、线程锁等。这种自动管理资源的方式可以确保资源在使用后被正确地释放,从而避免资源泄漏和程序崩溃等问题。

文件指针移动

        要移动文件指针到指定位置,可以使用seek()函数。文件指针是一个内部变量,用于指示当前读写位置在文件中的位置。seek()函数接受两个参数:第一个参数用于指定新的位置,以字节为单位;第二个参数可选,表示要从哪个位置开始偏移,0表示从文件开头开始算起(默认值),1表示从当前位置开始算起,2表示从文件末尾开始算起。移动后,下一次读写操作将从指定位置开始。

file = open('text.txt', 'r')
# 读取前6个字符
data = file.read(6)
# 移动文件指针到文件开头
file.seek(0)
# 再次读取前6个字符
data = file.read(6)
file.close()

        除了seek()函数,还可以使用tell()函数来获取当前文件指针的位置。tell()函数返回一个整数,表示当前文件指针的位置。

file = open('text.txt', 'r')
data = file.read(6)
position = file.tell()
print(position)
file.close()

获取目录列表

        在Python中,可以使用os模块的listdir()函数来获取目录列表,该函数将返回给定目录中的所有文件和目录的名称列表。

import oscur_dir = os.getcwd()
files = os.listdir(cur_dir)
for file in files:print(file)

        在Python 3.4及更高版本中,还可以使用os模块的scandir()函数扫描目录的内容。scandir()函数会返回一个生成器,每次迭代产生一个ScandirItem对象,该对象代表目录中的一个条目,包括:文件、目录、链接等。

import oscur_dir = os.getcwd()
for item in os.scandir(cur_dir):  print(item.path, item.is_file())

        我们还可以使用pathlib模块的Path()函数返回一个PosixPath或WindowsPath对象,该对象有一个iterdir()函数,用于创建一个包含该目录下所有文件和目录的迭代器。由iterdir()函数生成的每个条目都包含文件或目录的信息,比如:名称、文件属性等。

import os
from pathlib import Pathcur_dir = os.getcwd()
entries = Path(cur_dir)
for entry in entries.iterdir():print(entry.name, entry.is_dir())

        除了iterdir()函数,Path对象还包括不少实用的函数,可参看下面的介绍。

        Path.mkdir(mode=0o777, parents=False, exist_ok=False):创建目录。如果目录已经存在,exist_ok=True参数将避免引发异常。注意:需要确保当前用户具有足够的权限来创建目录,如果目录权限不允许创建或发生其他错误,可能会引发异常。

        Path.unlink(missing_ok=False):删除文件。注意:需要确保当前用户具有足够的权限来删除文件,如果文件权限不允许删除或发生其他错误,可能会引发异常。

        Path.chmod(mode):改变文件权限。注意:需要确保当前用户具有足够的权限来改变文件权限,如果权限不足或发生其他错误,可能会引发异常。

        Path.chown(uid, gid, recursive=False):改变文件所有者,uid和gid参数指定新的所有者和组。注意:需要确保当前用户具有足够的权限来改变文件所有者。在某些操作系统上,该功能可能不可用或有限制。如果权限不足或发生其他错误,可能会引发异常。

        Path.touch(mode=0o777, exist_ok=True):创建新文件,如果文件已存在,则不改变内容。该函数需要写入权限才能创建文件,如果当前用户没有足够的权限,可能会引发权限错误。

        Path.rmdir(missing_ok=False):删除目录。注意:该函数只能删除空目录,如果目录中包含文件或其他目录,将无法进行删除。另外,使用该函数时,需要确保当前用户具有足够的权限来删除目录;如果目录权限不允许删除或发生其他错误,可能会引发异常。

        Path.rename(new_path):重命名文件或目录。如果文件或目录已经存在,它将被覆盖。注意:在使用该函数时,需要确保当前用户具有足够的权限来重命名文件或目录;如果权限不足或发生其他错误,可能会引发异常。

        Path.exists(path, exist_ok=False):检查路径是否存在。

        Path.is_dir(path):检查路径是否为目录。

        Path.is_file(path):检查路径是否为文件。

        Path.glob(pattern):对给定的模式进行glob遍历。注意:需要确保当前用户具有足够的权限来访问目录中的文件,如果发生权限不足或其他错误,可能会引发异常。

        Path.resolve(strict=False):获取文件或目录的绝对路径。

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

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

相关文章

景联文科技:高质量AI数据标注助力大语言模型训练,推动人工智能落地应用

大语言模型在各类LLM新技术的融会贯通下,不断加速Instruction-tuning、RLHF、思维链等新技术在大语言模型中的深度应用,人工智能技术以惊人的速度不断进化。 大语言模型(LLM)是一种基于深度学习技术和海量文本数据,它们…

Leetcode:349. 两个数组的交集【题解超详细】

题目 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 难度:简单 题目链接:349.两个数组的交集 示例 1: 输入:nums1 [1,2,2,1], nums2 [2,…

【08期】ArrayList常见面试题

简介 ArrayList是我们开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,非常适合用于对元素进行查找,效率非常高。 线程安全性 对ArrayList的操作…

LeetCode每日一题:1921. 消灭怪物的最大数量(2023.9.3 C++)

目录 1921. 消灭怪物的最大数量 题目描述: 实现代码与解析: 贪心 原理思路: 1921. 消灭怪物的最大数量 题目描述: 你正在玩一款电子游戏,在游戏中你需要保护城市免受怪物侵袭。给你一个 下标从 0 开始 且长度为 …

百度文心一言GPT免费入口也来了!!!

文心一言入口地址:文心一言能力全面开放 文心一言是百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。 文心一言的技…

Python 分析HTTP的可靠性

在这篇文章中,我们将介绍如何使用 Python 来分析代理服务提供商的可靠性。代理服务在许多场景中都非常有用,例如突破地理限制、保护隐私和提高网络安全性。然而,并非所有的代理服务提供商都是可靠的。因此,我们将使用 Python 来测…

【传输层】TCP -- 三次握手四次挥手 | 可靠性与提高性能策略

超时重传机制连接管理机制三次握手四次挥手滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP应用层协议理解 listen 的第二个参数 超时重传机制 主机A发送数据给B之后,可能因为网络拥堵等原因,数据无法到达主机B&#xff1…

3DCAT携手华为,打造XR虚拟仿真实训实时云渲染解决方案

2023年5月8日-9日,以 因聚而生 众志有为 为主题的 华为中国合作伙伴大会2023 在深圳国际会展中心隆重举行。本次大会汇聚了ICT产业界的广大新老伙伴朋友,共同探讨数字化转型的新机遇,共享数字化未来的新成果。 华为中国合作伙伴大会2023现场&…

在线音乐播放器测试报告

文章目录 一、项目背景二、项目功能三、测试目的四、测试环境五、测试计划5.1 功能测试5.2 自动化测试 六、测试结果 一、项目背景 今天,市面上的音乐播放器种类繁多同时功能强大。一个单纯的音乐播放器可能不再单纯只是音乐播放的功能,而是更多地集短视…

对战ChatGPT,创邻科技的Graph+AI会更胜一筹吗?

大模型(大规模语言模型,即Large Language Model)的应用已经成为千行百业发展的必然。特定领域或行业中经过训练和优化的企业级垂直大模型则成为大模型走下神坛、真正深入场景的关键之路。 但是,企业级垂直大模型在正式落地应用前…

机器人中的数值优化(十一)——高斯牛顿法、LMF方法、Dogleg方法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,…

【FPGA零基础学习之旅#11】数码管动态扫描

🎉欢迎来到FPGA专栏~数码管动态扫描 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能指正…

hadoop1.2.1伪分布式搭建

0.使用host-only方式 将Windows上的虚拟网卡改成跟Linux上的网卡在同一网段 注意:一定要将widonws上的WMnet1的IP设置和你的虚拟机在同一网段,但是IP不能相同 1.Linux环境配置(windows下面的防火墙也要关闭) 1.1修改主…

HarmonyOS—UI开发性能提升的推荐方法

注:本文转载自HarmonyOS官网文档 开发者若使用低性能的代码实现功能场景可能不会影响应用的正常运行,但却会对应用的性能造成负面影响。本章节列举出了一些可提升性能的场景供开发者参考,以避免应用实现上带来的性能劣化。 使用数据懒加载 开…

BBR cwnd_gain 的循环依赖 bug

同事咨询了一个有趣的问题,bbr 在probe bw 状态下,rtt 变小了,但采集到的 delivery date 却没变,此时算出来的 cwnd 变小,限制了 sender 发送。这种情况应该调什么参数。 这是 bbr 一个典型的循环依赖 bug&#xff0c…

VUE 程序的执行过程(非常非常重要)

在Vue.js应用程序中&#xff0c;index.html和main.js的执行顺序是&#xff1a; 1. 首先&#xff0c;浏览器加载index.html文件。 2. 在index.html文件中&#xff0c;通过<script>标签引入了main.js文件。 3. 当浏览器遇到<script>标签时&#xff0c;它会停止解析H…

如何熟练使用vector?

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f…

Blender 围绕自身的原点旋转与游标旋转

默认情况下的旋转是&#xff0c;R后旋转是物体自身的原点旋转 可以修改为围绕游标旋转&#xff0c;通过旋转R时 局部与全局坐标 全局的坐标不会变 局部的会随着物体的旋转变化 如果平稳时GZZ会在全局到局部坐标之间切换 或在局部到全局之间的切换 学习视频&#xff1a;【基础…

PaddleNLP使用Vicuna

LLaMA 模型 LLaMa 是一个大型语言模型&#xff0c;由 Meta 开源。它的全称是 Large Language Model Meta AI&#xff0c;参数量从 70 亿到 650 亿不等。例如&#xff0c;130 亿参数的 LLaMA 模型在大多数基准上可以胜过参数量达 1750 亿的 GPT-3&#xff0c;而且可以在单块 V1…

go语言-channel

环形缓存可以降低GC得开销 channel使用得是mutex锁 互斥锁并不是排队发送/接收数据 互斥锁保护的hchan结构体本身 Channel并不是无锁的 底层发送原理 c<- 关键字是一个语法糖 编译阶段&#xff0c;会把 c<- 转化为 runtime.chansend10 chansend10会调用 charsend0 方法…