热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

20210520文件修改详解

对文件的操作,除了常见的读写,还有修改;如果在源文件修改,会覆盖源文件有两个办法,vim加载到内存中,然后才能进行修改,修改的文件其实是在内存里修改后,在写回源文件;但硬盘不行,中

对文件的操作,除了常见的读写,还有修改;如果在源文件修改,会覆盖源文件
有两个办法,vim 加载到内存中,然后才能进行修改,修改的文件其实是在内存里
修改后,在写回源文件;但硬盘不行,中间插一段,数据不会自动往后挤
另一种方式是,打开一个文件,修改后,写入到新文件中;不要觉得 low, 只能这么干
逐行读取,找到后,插入写入新内容;改完后,全放在新文件里,整个新文件是改后的文件
边读边写,如果不是需要修改的,写到新文件中,如果是需要修改的,改完后,在写入
所以,需要同时打开两个文件,一个文件读,另一个文件往里写

1-1
# 文件修改
# 一定会用到循环,需要打开两个文件
# 不要写 r+ 万一不小心写了呢
f = open("yesterday","r",encoding="utf-8")
f_new = open("yesterday2.bak","w",encoding="utf-8")
for line in f:
if "肆意的快乐" in line:
line = line.replace("肆意的快乐等我享受","肆意的痛苦不断蔓延")
f_new.write(line)
else:
f_new.write(line)

1-1-2
# 有两行一样的代码,如何只出现一次?
f = open("yesterday","r",encoding="utf-8")
f_new = open("yesterday2.bak","w",encoding="utf-8")
for line in f:
if "肆意的快乐" in line:
line = line.replace("肆意的快乐等我享受","肆意的痛苦不断蔓延")
f_new.write(line)
# 这样做,是否可行呢?
# 这样一句话就搞定了
f.close()
f_new.close()
--->
喔, 我宁回昨日
肆意的快乐等我享受
突然间 我迷失了自己
喔, 我宁回昨日
肆意的痛苦不断蔓延
突然间 我迷失了自己
# 如果不想出现两个文件,移回新文件就好了

with 语句
# 前面的程序都是忘记关闭的
# 虽然程序执行完成后,会自动帮你去关闭
# 但是,既然能自动关闭,为什么我还要去关闭呢?
# 虽然程序结束后,python 自带的垃圾回收机制会帮你自动关闭文件
# 但是,如果你的程序运行了,打开1000个文件没有关闭,只要你的程序不退出
# 打开的文件句柄就不会被清空,就会一直在内存中占有一个空间
# 虽然这个空间不会特别大,但是不断的累积会导致越来越大,造成不必要的空间浪费
# 比如 winXP 机器配置本来不好,打开几十个文件不关闭,机器就会越来越慢
# 所以,打开的文件,应该及时关闭
# 操作完后,就关闭
# 但是还是会忘记,怎么办?新的方法,用 with
with open('log','r') as f:

1-1
f = open("yesterday2","r",encoding="utf-8")
# 相当于
with open("yesterday2","r",encoding="utf-8") as f:
# 这个时候,如果想读里面的内容,也是,一样的
print(f.readline()) # 缩进了,这是在 with 语句下进行的
# as f 就相当于 f = open("yesterday2","r",encoding="utf-8")

1-1-2
# 如果想进行循环呢?
with open("yesterday2","r",encoding="utf-8") as f:
for line in f:
print(line)
# 结果是一样的,不需要在写关闭
# 这段语句执行完毕之后,往下走时,with 就执行完毕了
# with 的作用就是关闭文件
# 以后要多用 with

1-2
# 在 Python 2.7 后,with 又支持同时对多个文件的上下文进行管理,即:
with open('log1') as obj1, open('log2') as obj2:
pass
# Python 官方的开发规范说,一行代码不应该超过 80 个字符

1-2-1
# 为了方便观看,建议用一下的方式 (换行)
with open("yesterday2","r",encoding="utf-8") as f,\
open("yesterday2","r",encoding="utf-8") as f2:
# 为了清晰,如果你同时打开多个文件,建议也这么写
pass

推荐阅读
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 笔记day2 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • php支持中文文件名
    2019独角兽企业重金招聘Python工程师标准大家可能遇到过上传中文文件名的文件,或者读取中文目录时不能读取,出现错误的情况这种情况是因为php自动将中文字符转成了utf8 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
author-avatar
I-1ove-Y0u
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有