python文件操作
2020-12-13 05:51
标签:技术 set 自动 替换 move ima 位置 读取 两种方法 什么是文件? 操作系统给用户提供的可以操作硬盘的简易接口 Python的文件操作: r: 读 1、只能读,不能写, f.readable() = True 2、如果文件不存在,会报错。 w: 写 1、不能进行读操作,只能写。 2、写的时候会覆盖之前的内容 3、如果指定文件不存在,会创建一个,不会报错。 a: 追加 1、不能进行读操作 2、指定文件不存在,不会报错,会创建一个文件。 3、光标默认在末尾。 t: 文本模式 必须和r/w/a连用,比如 rt, wt, at, 如果不写,默认为t b: 二进制模式 不能单独在mode里使用,必须和r/w/a连用。通常用来处理非文本文件 open 关键字 f = open(‘文件路径‘, mode=‘‘, encoding="") Python2中读取文件默认使用的是ASCLL编码,python3读取文件默认使用UTF-8 python2读取文件打印时会报错
注意:如果文件操作是b模式的话就不能写encoding,不然会报错 :ValueError: binary mode doesn‘t take an encoding argument 单独用open操作文件时,需要关掉文件接口 f.close() 。因为如果不关的话,虽然变量f,Python会通过垃圾回收机制回收掉,但是对于操作系统,它会把这个文件操作的接口一直开着,导致浪费资源。 打开一个文件的时候,会占用两部分资源:操作系统级打开的文件 + 应用程序的变量。所以要注意,两个资源都要及时回收。 Python 提供了一个方法,能自动回收操作系统级打开的文件资源。那就是with关键字。 with open(‘文件路径‘, mode=‘‘) as f: 。。。 python3 操作文件只有一种方法 open() python2 操作文件有两种方法 file() open() file(), open()的操作都比较类似,但是两个有本质的区别,file是一个文件类,打开文件时相当于是在构造文件类。而open()是在用Python的一个内置函数来操作。 python2读取文件默认使用的是ascll,python3默认使用的是utf-8编码 文件操作相关方法: f.read() 读取所有数据 f.readline() 读取一行数据, 光标移动到第二行行首 f.readlines() 返回一个列表,列表元素是每一行的内容 f.readable() 判断不否可读 f.write() 写入数据 当write针对 b模式写入时,需要把数据进行encode, 将内存的unicode编码内容 encode成二进制文件,才能写入。 f.writelines() 写入一个迭代器对象,比如列表。 当写入针对b模式时,需要把迭代器里面的元素进行encode, f.writeable() 判断能不能写 f.truncake(size:int) 截断文件,保留 0-size长度的文件,其余的全部删掉。 truncake是截断文件,所以文件的打开方式必须是可写,w或者w+会清空文件,所以不能选择。因此truncake截断文件只能在 r+, a, a+模式下进行。 f.tell() 查看光标移动了多少位 f.seek(offset:int, whence=0) offset: 光标移动的位数 whence 有三种选择 0, 1, 2 0:表示光标从头开始 1:表示光标从当前位置开始 2:表示光标从尾部开始 注意:1和2模式只能在b模式下使用,且只能以bytes移动文件。 思考:如何修改文件内的内容? 修改时,打开的文件必须可写,而w,w+之类的会清空文件,修改不了。a,a+模式,只能在尾部添加。也不行 使用r+的时候,再利用f.seek(),移动光标,新内容会覆盖旧内容。如果长度不一样,就会把要用的内容覆盖掉。 方案一:将文件的内容全部读取出来,利用replace替换掉要修改的内容。再将替换过的内容利用w/w+写入文件 with open(‘文件路径‘, ‘r’, encoding=‘utf-8‘): data = f.read() with open(‘文件路径‘, ‘w‘, encoding=‘utf-8‘) as f: res = data.replace(old, new) f.write(res) 缺点:当文件很大时,将内容一次性全read出来,有可能造成内存溢出。 优点:不占硬盘空间,硬盘始终只有一个文件。 方案二:将文件的内容逐行读取,再打开一个新文件,写入逐行读取并修改后的内容。最后把旧文件删了,保留并将新文件重命名为旧文件。 with open(‘文件路径‘, ‘r’, encoding=‘utf-8‘) as f, \ open(‘新文件路径‘,‘a‘, encoding=‘utf-8‘) as f2, for line in f: line_data = line.replace(old, new) f2.write(line_data) import os os.remove(‘旧文件‘) os.rename(‘新文件‘, ‘旧文件’) 优点:内存中始终只有一行内容,不占内存 缺点:在某一时刻,硬盘中会存在两个文件 python文件操作 标签:技术 set 自动 替换 move ima 位置 读取 两种方法 原文地址:https://www.cnblogs.com/KbMan/p/11152911.html 文件操作单位
要在文件头加一个 #coding:utf-8
文件内光标移动