文件操作

一般对于文件,二逼青年是先open再处理,结束后close;文艺青年则with open (文件名) as f:一顿操作

下面是简单文件操作,将文件1.text中的一些内容修改:

 1 import os
 2 
 3 # 改文件,将所有'a'改成1,'s'改成2
 4 with open('1.text', 'r',encoding='utf-8') as fr,
 5     open('2.text','w',encoding='utf-8') as fw:
 6     for i in fr:
 7         if 'a' in i:
 8             i = i.replace('a','1')  # 字符串替换是需要赋值的
 9         if 's' in i:
10             i = i.replace('s','2')
11         fw.write(i)
12 
13 os.rename('1.text','3.text')
14 os.rename('2.text','1.text')
15 os.remove('3.text')
View Code

为什么用with可以省略关闭的过程?

python中一切皆对象,open相当于是一个类,with open (文件名) as f 等同于(但是不同)f = open(文件名),可见open这个类中自带打开与关闭,即__enter__,__exit__

 1 class Open:
 2     def __init__(self, name):
 3         self.name = name
 4 
 5     def __enter__(self):
 6         print("11111")
 7         return self
 8 
 9 # 可以在exit里面写清理功能,比如close
10     def __exit__(self, exc_type, exc_val, exc_tb):
11     # 没有意外情况下三个值是空,当with内部逻辑错误时,将跳过这个逻辑,进入exit,此时三个参数分别是异常类(名),异常值,以及追踪信息
12         print("22222222")
13         print(exc_type)
14         print(exc_val)
15         print(exc_tb)
16         return True  # 将异常吞了,不爆红
17 
18 
19 with Open('hello.txt') as f:   # 触发__enter__,拿到返回值给f,即f = Open('hello.txt').__enter__()
20     print(f)
21     print("假设一堆逻辑")
22     print("假设一堆逻辑")
23     print(aaaaaaaaaaaaaaaaaaaaaaaaaa)  # 错误逻辑,直接触发exit,下面逻辑不能显示,即with语句结束
24     print("luoji")
25     print("luoji")
26 
27 print("00000000000000000000000")  # 如果没有return True这个也显示不了
View Code
原文地址:https://www.cnblogs.com/maxiaonong/p/9498208.html