首页 > 编程语言 >【python】with as语句

【python】with as语句

时间:2023-05-30 20:44:55浏览次数:49  
标签:语句 文件 调用 python 读写 read close open

读文件

读写文件是最常见的IO操作。python内置了读写文件的函数,用法和C是兼容的。

读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:

>>> f = open('/Users/michael/test.txt', 'r')

标示符'r'表示读,这样,我们就成功地打开了一个文件。如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在:

>>> f=open('/Users/michael/notfound.txt', 'r')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'

如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示

>>> f.read()
'Hello, world!'

最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:

>>> f.close()

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现:

try:
    f = open('/path/to/file', 'r')
    print(f.read())
finally:
    if f:
        f.close()

但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

with open('/path/to/file', 'r') as f:
    print(f.read())

这和前面的try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。

调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。

标签:语句,文件,调用,python,读写,read,close,open
From: https://www.cnblogs.com/sunbines/p/17444371.html

相关文章

  • python基础 14
    装饰器的简易版本核心思想: 在不改变被装饰对象内部代码和原有调用方式的基础之上在添加额外的功能#给被装饰对象添加额外的功能给index函数添加统计执行时间的功能defindex():time.sleep(3)index()importtimedefindex():time.sleep(3)p......
  • Python连接es笔记三之es更新操作
    本文首发于公众号:Hunter后端原文链接:Python连接es笔记三之es更新操作这一篇笔记介绍如何使用Python对数据进行更新操作。对于es的更新的操作,不用到Search()方法,而是直接使用es的连接加上相应的函数来操作,本篇笔记目录如下:获取连接update()update_by_query()批量......
  • Python 执行Javascript脚本
    一、安装第三方库pipinstallPyExecJS二、创建一个js文件//test.jsfunctionadd(a,b){returna+b}三、创建一个python文件#testJs.pyimportexecjsctx=execjs.compile(open('./test.js','r',encoding='utf-8').read())print(ctx.call('add&#......
  • python day6
    第一阶段第六章6.1数据容器 6.2列表列表中元素类型不限,可以混合 ["itheima",888,True]1#列表里面嵌套列表2my_list=[[1,2,3],[4,5,6]]3print(my_list)4print(type(my_list))6.3列表遍历下标定义可以反向 #列表里面嵌套列表取数据my_......
  • Python变量基础知识
    Python变量基础知识-Python专栏-万象专栏(wanxiangsucai.com) 举例:第一种:myName  myFriendName第二种:MyName  MyFriendName第二种:my_name  my_friend_name......
  • python split space
    发现自己写python的空格split还挺多坎的,尤其是最后一个是空格的情形:defsplit(s):i=0ans=[]whilei<len(s):start=i#findspacewhilei<len(s)ands[i]!='':i+=1ans.append(s[start:i])......
  • python中如何使用正则表达式查询字符串
    '''Createdon2019年12月2日@author:hp''''''上一篇文章介绍了那么多关于正则表达式的用法,现在终于到了python中如何使用正则表达式了,不急,请诸君慢慢来''''''之前在讲字符串时,已经说过了字符串的格式化输出,大家没看的可以看我的上一篇文章格式化输出时,是含有模式串......
  • 逆序的三位数 (10 分) python版
    逆序的三位数(10分)python版程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。输入格式:每个测试是一个3位的正整数。输出格式:输出按位逆序的数。输入样例:123输出样例:321'''Createdon2019年11......
  • Python-7递归函数
    1.递归函数:自己调用自己,有来有回,一去一回"""-*-coding:utf-8-*-@FileName:recursion.py@Software:PyCharm@Time:2023/5/1016:04@Author:Panda"""#递归函数:recursion,自己调用自己,有来有回,一去一回defrecursion(n):print("未调用前{}"......
  • 如何用ChatGPT学Python
    大家好,欢迎来到Crossin的编程教室!关于ChatGPT的能力,大家想必都已听说,很多同学应该都亲自体验过了。其在自然语言处理方面的出色表现,绝对是颠覆了之前大众对人工智能的印象但ChatGPT的能力还远不止对于语言文字的处理,它甚至可以对代码进行理解和生成,这有赖于它丰富的知识库和背......