zoukankan      html  css  js  c++  java
  • 文件操作

    一般对于文件,二逼青年是先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
  • 相关阅读:
    vue-cli3配置开发环境和生产环境
    vue配置开发环境和生产环境
    js实现div拖拽互换位置效果
    axios用post提交的数据格式
    面试题会被问及哪些?(总结)
    深入理解vue
    nodejs 前端项目编译时内存溢出问题的原因及解决方案
    MUI框架开发HTML5手机APP(一)--搭建第一个手机APP
    关于if省略{}时的一些问题
    函数声明的两种形式的区别
  • 原文地址:https://www.cnblogs.com/maxiaonong/p/9498208.html
Copyright © 2011-2022 走看看