首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第4章 选择易懂的名称
4.1 命名风格
4.2 PEP 8 的命名风格
4.3 适当的名称长度
4.3.1 太短的名称
4.3.2 太长的名称
4.4 起易于搜索的名称
4.5 避免笑话、双关语和需要文化背景才能理解的词汇
4.6 不要覆盖内置名称
4.7 史上最差的变量名
第5章 揪出代码的坏味道
5.1 重复的代码
5.2 魔数
5.3 注释掉的代码和死代码
5.4 打印调试
5.5 带有数字后缀的变量
5.6 本该是函数或者模块的类
5.7 嵌套列表解析式
5.8 空的except块和糟糕的错误信息
5.9 代码坏味道的谬误
5.9.1 谬误:函数应该仅在末尾处有一个return语句
5.9.2 谬误:函数最多只能有一个try语句
5.9.3 谬误:使用flag参数不好
5.9.4 谬误:全局变量不好
5.9.5 谬误:注释是不必要的
第6章 编写Python 风格的代码
6.1 Python 之禅
6.2 学着喜欢强制缩进
6.3 使用timeit模块衡量性能
6.4 常被误用的语法
6.4.1 使用enumerate()而不是range()
6.4.2 使用with 语句代替open()和close()
6.4.3 用is 跟None 做比较而不用==
6.5 格式化字符串
6.5.1 如果字符串有很多反斜杠,请使用原始字符串
6.5.2 使用f-string 格式化字符串
6.6 制作列表的浅副本
6.7 以Python 风格使用字典
6.7.1 在字典中使用get()和setdefault()
6.7.2 使用collections.defaultdict()设置默认值
6.7.3 使用字典代替switch 语句
6.8 条件表达式:Python“丑陋”的三元运算符
6.9 处理变量的值
6.9.1 链式赋值和比较运算符
6.9.2 验证变量是否为多个值中的一个
当前位置:
首页>>
技术小册>>
Python编程轻松进阶(二)
小册名称:Python编程轻松进阶(二)
### 6.4.2 使用`with`语句代替`open()`和`close()` 在Python编程中,文件操作是一项基础且频繁的任务。无论是读取配置文件、处理日志文件,还是进行数据的输入输出,都不可避免地需要打开和关闭文件。传统的文件打开方式是通过`open()`函数,并在操作完成后手动调用`close()`方法来关闭文件。然而,这种方式存在一个问题:如果在文件操作过程中发生异常,`close()`方法可能不会被执行,从而导致文件资源泄露或数据损坏。为了解决这个问题,Python引入了`with`语句,它提供了一种更加优雅且安全的方式来管理文件资源。 #### 6.4.2.1 `with`语句简介 `with`语句是Python中的一个上下文管理器(Context Manager),它用于包装代码的执行,确保某段代码执行前后,能自动进行资源的分配与释放工作。具体到文件操作中,`with`语句可以自动管理文件的打开和关闭,即使在文件操作过程中发生异常,也能保证文件被正确关闭,从而避免了资源泄露的风险。 #### 6.4.2.2 使用`with`语句打开文件 使用`with`语句打开文件的基本语法如下: ```python with open(filename, mode='r', encoding='utf-8') as file: # 在这里对文件进行操作 content = file.read() # 无需手动调用close(),with语句结束时会自动关闭文件 ``` 在这个例子中,`open()`函数被用作`with`语句的上下文管理器。`filename`是你要打开的文件名,`mode`是打开文件的模式(默认为'r',即只读模式),`encoding`指定了文件的编码方式(默认为系统默认编码,但显式指定为'utf-8'是一个好习惯,特别是在处理文本文件时)。`as file`部分将打开的文件对象赋值给变量`file`,之后你就可以在`with`语句块内部使用这个变量来操作文件了。 #### 6.4.2.3 `with`语句的优势 1. **自动管理资源**:`with`语句会自动调用上下文管理器的`__enter__()`和`__exit__()`方法。对于文件操作来说,`open()`函数返回的文件对象就实现了这两个方法,其中`__enter__()`方法返回文件对象本身,而`__exit__()`方法则负责关闭文件。这意味着你无需手动调用`close()`方法。 2. **异常安全**:如果在`with`语句块内部发生了异常,`with`语句会确保`__exit__()`方法被调用,从而保证了文件被正确关闭。这避免了因异常导致的资源泄露问题。 3. **代码清晰**:使用`with`语句可以使代码更加简洁、易读。它明确指出了哪些资源需要在代码块执行完毕后被清理,有助于提升代码的可维护性。 #### 6.4.2.4 示例:读取文件内容 下面是一个使用`with`语句读取文件内容的示例: ```python filename = 'example.txt' try: with open(filename, 'r', encoding='utf-8') as file: content = file.read() print(content) except FileNotFoundError: print(f"文件 {filename} 未找到。") except Exception as e: print(f"读取文件时发生错误:{e}") ``` 在这个例子中,我们尝试打开并读取`example.txt`文件的内容。如果文件不存在,会捕获`FileNotFoundError`异常并打印相应的消息。如果发生其他类型的异常(如编码错误),则会捕获`Exception`异常并打印错误信息。由于使用了`with`语句,我们无需担心文件是否会被正确关闭。 #### 6.4.2.5 示例:写入文件内容 同样地,使用`with`语句写入文件内容也非常简单: ```python filename = 'output.txt' content = 'Hello, Python!\n' with open(filename, 'w', encoding='utf-8') as file: file.write(content) print(f"内容已写入 {filename}") ``` 在这个例子中,我们打开(如果不存在则创建)`output.txt`文件,并写入一行文本。由于使用了`'w'`模式,如果文件已存在,其内容会被覆盖。同样地,由于`with`语句的存在,我们无需担心文件是否会被正确关闭。 #### 6.4.2.6 注意事项 - **文件模式**:在调用`open()`函数时,请确保选择了正确的文件模式(如`'r'`、`'w'`、`'a'`等),以避免不必要的数据丢失或覆盖。 - **编码方式**:在处理文本文件时,显式指定文件的编码方式是一个好习惯。虽然Python 3默认使用UTF-8编码,但在处理来自不同源的文件时,指定正确的编码方式可以避免编码错误。 - **异常处理**:虽然`with`语句提供了异常安全保证,但在进行文件操作时,仍然建议添加适当的异常处理逻辑,以处理可能发生的特定错误(如文件不存在、权限问题等)。 #### 6.4.2.7 结论 通过使用`with`语句代替传统的`open()`和`close()`方法,我们可以更加安全、方便地管理文件资源。`with`语句不仅简化了代码,还提高了程序的健壮性和可维护性。在Python编程中,掌握`with`语句的使用是进阶的必经之路。希望本章内容能够帮助你更好地理解并应用`with`语句进行文件操作。
上一篇:
6.4.1 使用enumerate()而不是range()
下一篇:
6.4.3 用is 跟None 做比较而不用==
该分类下的相关小册推荐:
Python3网络爬虫开发实战(下)
Python编程轻松进阶(五)
Python合辑4-130个字符串操作示例
Python合辑8-变量和运算符
剑指Python(磨刀不误砍柴工)
Python合辑5-格式化字符串
Python与办公-玩转PPT
Python甚础Django与爬虫
Python合辑2-字符串常用方法
Python编程轻松进阶(四)
Python编程轻松进阶(一)
Python与办公-玩转Word