python学习笔记(文件、上下文管理器、print()方法的的补充)

Python基础教程讲解——print输出重定向介绍,奥利戈 本期的Python基础教程给大家讲print输出相关知识点,敲黑板听课了! Python中调试程序使用最多的是print(),在使用print()打印时事实上是调用了 sys.stdout.write()。不过print在把内容打印到控制台后,追加了一个换行符(linefeed)。以下例程中,print和sys.stdout.write()是等价的: 在Python中, sys.stdin、sys... 阅读详情

文件

打开文件

打开文件:f = open(name[, mode])
name : 一个包含了你要访问的文件名称的字符串值。
mode : mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读。

常见的文件打开模式:

ModeDescription
r以只读方式打开文件。
rb以二进制格式打开一个文件用于只读
r+打开一个文件用于读写。
rb+以二进制格式打开一个文件用于读写。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。
w+打开一个文件用于读写。
wb+以二进制格式打开一个文件用于读写。
x独占写入模式。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾,新的内容将会被写入到已有内容之后。如果文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。
a+打开一个文件用于读写。
ab+以二进制格式打开一个文件用于追加。

说明:

  1. 文件打开时文件的指针将会放在文件的开头,文件从头输出到尾不会自动重新将指针指向文件的开头。
  2. 独占写入模式x,在文件已经存在的时候回发出FileExistsError异常。
  3. 如果写入模式想从既有文件末尾继续写入,可以使用附加模式a。

关闭文件

打开文件对文件进行了相应的操作后需要关闭文件,尤其是在写入文件时,因为在写入文件时Python可能缓冲写入的数据,如果此时程序崩溃了文件写入的内容将不会被成功的写入。
两个方法关闭文件:

  1. 使用try: ... finally:...
# 打开文件
f = open('xxx.txt')
try:
	# 对文件进行相应的操作
finally:
	f.close()
  1. 使用with语句
with open('xxx.txt') as f:
	# 对文件进行相应的操作

此处的with是上下文管理器。

上下文管理器

任何实现了 __enter__() 和 __exit__()方法的对象都可以成为上下文管理器。

__enter__() 方法会在执行 with 后面的语句时执行,用来处理操作前的内容。
__exit__() 方法会在 with 内的代码执行完毕后执行,用来进行文件的关闭,数据库的关闭等。
例:自己写with open函数:

class File():
	def __init__(self,filename,mode):
		self.filename = filename
		self.mode = mode
	
	def __enter__(self):
		self.f = open(self.filename, self.mode)
		return self.f
	
	def __exit__(self, *args):
		self.f.close()

	
With File('xxx.txt','w') as f:
		F.write('xxx')

file 对象方法

file.read([size]):size 未指定则返回整个文件,如果文件大小 >2 倍内存则有问题,f.read()读到文件尾时返回""(空字串)。

file.readline():返回一行。

file.readlines([size]):返回包含size行的列表, size 未指定则返回全部行。

f.write("hello\n"):如果要写入字符串以外的数据,先将他转换为字符串。

f.tell():返回一个整数,表示当前文件指针的位置(就是到文件头的比特数)。

f.seek(偏移量,[起始位置]):用来移动文件指针。
起始位置: 0 - 文件头, 默认值; 1 - 当前位置; 2 - 文件尾

f.writelies:接受一个字符串写入文件中,写入时不会添加换行符,需要自行添加。

f.close():关闭文件。

示例测试使用文件方法(详细说明)

'''
创建一个文件,其中内容为:
This is a text program
Welcome to this file
Python
'''
# 读取文件内容
>>> f = open(r'test.txt')
>>> f.read()
'This is a text program\nWelcome to this file\nPython'
>>> f.close()

# 使用with打开文件,会自动关闭
>>> with open('test.txt') as f:
...     f.read()
'This is a text program\nWelcome to this file\nPython'

# `w`模式打开文件,会创建文件并重写文件。
>>> f = open(r'test.txt','w')
>>> f.close()

# `x`模式打开文件,如果文件存在就会报错。
>>> f = open(r'test.txt','x')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'test.txt'

# 使用`r+`模式打开文件
>>> f = open(r'test.txt','r+')
# 写入文字
>>> f.write('Hey')
3
# 文件指针偏移,只会从当前位置进行文件操作
>>> f.read()
's is a text program\nWelcome to this file\nPython'
>>> f.read()
''
>>> f.close()

>>> f = open(r'test.txt','r+')
>>> f.read()
'Heys is a text program\nWelcome to this file\nPython'
# 文件写入会从文件指针处开始写入,如果文件存在内容即会覆盖当前的内容。

>>> f = open(r'test.txt','w')
# 使用`w`模式,写入时会重写整个文件。
>>> f.write('Heym')
4
>>> f.close()
>>> f = open(r'test.txt','r')
>>> f.read()
'Heym'
>>> f.close()

# readline读取一行,也可以传参读取指定的字符数。
# readlines读取整个文件所有内容。
>>> f = open(r'test.txt')
>>> f.readline()
'This is a text program\n'
>>> f.readline(2)
'We'
>>> f.readlines()
['lcome to this file\n', 'Python']

# tell()获取当前文件指针的位置。
>>> f.tell()
50
# seek()调整指针的位置
>>> f.seek(0)
0
>>> f.readlines()
['This is a text program\n', 'Welcome to this file\n', 'Python']
>>> 

print()方法的的补充

print()也可以对文件进行写入。
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
objects:表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。
sep:用来间隔多个对象,默认值是一个空格。
end:用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
file:要写入的文件对象。
flush:输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。

例:

>>> f = open('test.txt','w')
>>> print('First','line',file=f)
>>> print('Second','line',file=f)
>>> print('Third','and final','line',file=f)
>>> f.close()
>>> lines = list(open('test.txt'))
>>> lines
['First line\n', 'Second line\n', 'Third and final line\n']
>>> first, second, third = open('test.txt')
>>> first
'First line\n'
>>> second
'Second line\n'
>>> third
'Third and final line\n'
Python基础教程讲解——print输出重定向介绍 本期的Python基础教程给大家讲print输出相关知识点,敲黑板听课了! Python中调试程序使用最多的是print(),在使用print()打印时事实上是调用了 sys.stdout.write()。不过print在把内容打印到控制台后,追加了一个换行符(linefeed)。以下例程中,print和sys.stdout.write()是等价的: sys.stdout.write('He... 阅读详情

相关推荐

Python上下文管理器原理与高效资源管理实践

上下文管理器是Python中实现资源自动分配与释放的核心机制,基于`__enter__`和`__exit__`魔术方法构成的管理协议。其技术价值在于确保文件、数据库连接等稀缺资源始终被正确释放,即使在发生异常的情况下。通过with语句的标准化语法,开发者可以避免手动编写try-finally模板代码,显著提升代码健壮性。典型应用场景包括文件IO操作、数据库连接池管理、线程锁控制等系统编程领域。PyPI统计显示超过83%的Python库采用该模式处理资源管理,配合contextlib工具库能进一步简化实现。在

weixin_34101784的博客 309

知识蒸馏代码实现(内容:知识蒸馏模型识别MNIST手写数字体,自定义MLP网络做为教师和学生网络,训练结果保存在log文件中,不同蒸馏损失计算方法得到的结果对比)

里面有12种最新的知识蒸馏算法。

分享计算机视觉,C++,网络摄像头研发,音视频开发,嵌入式等知识。 5587

Python上下文管理器:原理、实现与应用场景

上下文管理器是Python中用于资源管理的重要机制,通过with语句实现资源的自动获取与释放。其核心原理基于__enter__和__exit__两个魔法方法,确保无论代码块是否抛出异常,资源都能被正确清理。这种模式在文件操作、数据库连接、线程锁等场景中尤为重要,能有效防止资源泄漏。Python标准库中的contextlib模块提供了创建上下文管理器的便捷方式,而异步上下文管理器则扩展了其在协程中的应用。合理使用上下文管理器可以提升代码的健壮性和可读性,是Python开发中的最佳实践之一。

weixin_30701575的博客 373

Python中文件的操作

一 文件读取步骤 文件读取的三部曲: 打开–&amp;gt; 操作 -&amp;gt; 关闭 #打开 f=open('/tmp/file') print(f) #操作 f.write('hello') #判断文件对象拥有的权限 print(f.readable()) #true or false print(f.writable()) #关闭 f.close() #一定要关闭 注意:文件使用完毕后必须关闭,因...

qq_42725815的博客 407

【遥感数字图像处理(朱文泉)】第四章 变换域处理方法

变换域的处理方法

甜子yu的博客 4311

材料力学小白必看:纯弯曲正应力计算全解析(附实例演示)

本文详细解析了材料力学中纯弯曲正应力的计算原理与工程应用,通过实例演示帮助初学者掌握关键公式和计算流程。内容涵盖纯弯曲的基本假设、正应力分布规律、截面特性计算,以及现代工具如Excel、ANSYS和Python在应力分析中的应用,特别适合材料力学小白系统学习。

sea99的博客 1232

python的print与sys.stdout

print与sys.stdout 在python中,print语句实现打印,从技术角度来说,这是把一个或多个对象转换为其文本表达式形式,然后发送给标准输出流或者类似的文件流,更详细的说,打印与文件和流的概念紧密相连。 我们都知道在python中,向一个文件写东西是通过类似file.write(str)方法实现的,而你可能没想到print语句执行的操作其实也是一个写操作,不过他把我们从外设输入的...

一个安全研究员 3万+

高速电路的信号完整性分析

摘要:介绍了高速PCB设计中的信号完整性概念以及破坏信号完整性的原因,从理论和计算的层面上分析了高速电路设计中反射和串扰的形成原因,并介绍了IBIS仿真。 关键词:信号完整性 反射 串扰 IBIS仿真 随着半导体技术和深压微米工艺的不断发展,IC的开关速度目前已经从几十MHz增加到几百MHz,甚至达到几GHz。在高速PCB设计中,工程师经常会碰到误触发、阻尼振荡、过冲、欠冲、串...

bh_wang的专栏 1431

python获取文件夹名称、文件名、去除后缀的文件名、文件改名等

getfiledata.py import os def Makedir(path): folder = os.path.exists(path) if (not folder): os.makedirs(path) def GetFileData(fileDir, outDir): list_name = [] Makedir(outD...

vict_wang的博客 5万+

mac(apple silicon)arm64安装spm12详细教程

3.下载matlab runtime R2023b for macOS (macA64),注意必须下载这个,只下载matlab是不可以的。默认安装目录是/Applications/MATLAB/MATLAB_Runtime/R2023b。注意最后的命令,路径根据自己的matlab_runtime安装位置进行调整,然后就可以安装成功了。5. 解压spm12.zip,解压后将文件夹拖到应用程序下(Applications)2.下载spm12,这个版本可兼容mac芯片!6.打开mac终端,输入。

weixin_62332001的博客 2024

粒子滤波在基于误差状态量的INS/GNSS组合导航中的使用技巧-On Particle Filter based Error-State INS/GNSS Intergrated Navigation

本文面向以15维惯导(INS)误差为状态量,3维位置误差为量测量的INS/GNSS组合导航系统,​在西工大严恭敏老师的开源工具箱中PF相关库函数基础上实现基于粒子滤波(PF)的惯导误差状态量的递推估计,设计了粒子重置环节并强调了其在本特定场景下的重要性。

I33D33I的博客 1742

python上下文管理器细读

test 1 上下文管理器,将生成器转化为上下文管理器 import contextlib @contextlib.contextmanager def a(): print(1) yield print(3) with a() as q: print(2) test 2 使用上下文管理器,抽象出异常处理 import contextli...

华为云官方博客 1496

为什么idea已经改了UTF-8还是乱码,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1577

Python入门基础:with()、print()【配合“动手学深度学习”补充使用】

Python入门基础:with()、print()【配合“动手学深度学习”补充使用】

yingmohuanzhou的博客 552

AMDGPU驱动中Doorbell与Event机制简要对比

摘要:AMDGpu驱动中,Doorbell和Event是两种异步通知机制。Doorbell是CPU→GPU的单向硬件通知,通过写MMIO寄存器触发GPU拉取任务,延迟低且无需内核介入,适用于队列任务提交。Event是GPU→CPU的双向同步通知,基于中断和内核事件对象,支持阻塞等待,用于任务完成或异常上报。核心区别在于方向、用途和实现方式:Doorbell侧重任务触发,Event侧重状态反馈。两者配合实现高效的任务下发与完成通知流程。

图形/计算GPU的驱动与虚拟化技术分享园地 1857

ruoyi-nbcio基于ruoyi的flowable前端支持自定义表单组件的自动获取方法

ruoyi-nbcio基于ruoyi的flowable前端支持自定义表单组件的自动获取方法

宁波阿成的博客 607

中print中加f_聊一聊:Python中的上下文管理器

作者:Vamei出处:http://www.cnblogs.com/vamei上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围。一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存)。它的语法形式是with...as...关闭文件我们会进行这样的操作:打开文件,读写,关闭文件。程序员经常会忘记关闭文...

weixin_39928017的博客 80

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

怎么让python print不输出

方案:实现Python中的“静默”输出 引言 在Python编程中,print()函数常被用于调试与输出信息。然而,在某些情况下,我们希望禁用或“静默”这些输出信息,比如:日志记录、单元测试、或在生产环境中运行时为了减少控制台的输出。本文将探讨几种方法来让Python中的print()函数不输出,并提供相应的代码示例及流程...

weixin_34749016的博客 1446

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Python上下文管理器:原理与应用实践

上下文管理器是Python中实现资源自动管理的核心机制,通过__enter__和__exit__协议确保资源的正确获取与释放。其技术价值在于简化了try-finally模式,使代码更简洁可靠,特别适用于文件操作、数据库连接等需要精确控制生命周期的场景。基于contextlib模块的装饰器实现方式进一步降低了使用门槛,而异常处理机制则保障了程序的健壮性。在实际开发中,合理运用上下文管理器能显著提升代码可维护性,是Python工程实践中的重要设计模式。

diaoju3333的博客 503

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Python上下文管理器:原理、实现与最佳实践

上下文管理器是Python中管理资源的核心机制,通过__enter__和__exit__方法实现资源的自动获取与释放。这种设计模式遵循上下文管理协议,能有效解决文件操作、数据库连接等场景中的资源泄漏问题。在工程实践中,约70%的资源泄漏都源于人工管理疏忽,而上下文管理器通过确定性的资源生命周期管理,显著提升了代码健壮性。开发者可以通过类实现或contextlib工具创建自定义管理器,支持嵌套使用和异步场景。理解其异常处理机制和性能特征,结合临时文件、数据库连接等实际案例,能够编写出更安全的Python代码。

weixin_34293246的博客 371

解释什么是上下文管理器。如何创建和使用一个上下文管理器

上下文管理器(Context Manager)是一种Python特性,它允许你在一个代码块中设置和获取特定的环境变量,以便在代码块执行期间进行操作。上下文管理器通过使用with关键字来使用。要创建一个上下文管理器,你需要定义一个特殊的方法和__exit__()。当你在代码块中使用with关键字时,Python会自动调用这两个方法。return self # 返回管理器实例本身,用于在代码块外部使用# 使用上下文管理器在上面的示例中,我们定义了一个名为的类,它具有和__exit__()方法。在。

WangYaolove1314的博客 893

python教程程序中print_Python基础教程讲解——print输出重定向介绍

本期的Python基础教程给大家讲print输出相关知识点,敲黑板听课了!Python中调试程序使用最多的是print(),在使用print()打印时事实上是调用了 sys.stdout.write()。不过print在把内容打印到控制台后,追加了一个换行符(linefeed)。以下例程中,print和sys.stdout.write()是等价的:sys.stdout.write('HelloW...

weixin_39778447的博客 259

Python上下文管理器:原理、实践与性能优化

上下文管理器是Python中用于资源管理的核心机制,通过__enter__和__exit__魔术方法实现资源的自动获取与释放。其工作原理基于Python的协议编程范式,能够确保文件句柄、数据库连接等资源在使用后正确关闭,有效防止资源泄漏。在工程实践中,上下文管理器可减少60%以上的样板代码,广泛应用于文件操作、线程同步、数据库事务等场景。结合contextlib模块的生成器实现方式,开发者可以快速创建轻量级上下文管理器。现代Python项目中78%的资源管理采用with语句,已成为处理资源生命周期的标准方案

weixin_30945039的博客 543

python print 输出到txt_Python基础教程讲解——print输出重定向介绍

本期的Python基础教程给大家讲print输出相关知识点,敲黑板听课了!Python中调试程序使用最多的是print(),在使用print()打印时事实上是调用了 sys.stdout.write()。不过print在把内容打印到控制台后,追加了一个换行符(linefeed)。以下例程中,print和sys.stdout.write()是等价的:sys.stdout.write('Hello W...

weixin_39616003的博客 297
上一篇: matlab学习笔记(数据结构、矩阵与向量、冒号表达式与子矩阵提取、矩阵的运算)
下一篇: matlab学习笔记(流程控制结构、函数、二维图形的绘制、三维图形绘制)
leeyns
博客等级 码龄9年 18粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值