文件操作
文件操作介绍
在实际操作中,通常需要将数据写入到本地文件或者从本地文件中读取数据等操作。
常见的本地文件有:
本地文件操作步骤
- 找到文件所在位置
- 打开文件
- 操作文件
- 关闭文件
python方法操作
open()函数
open(file, mode=‘r’, encoding=None): 打开文件
-
file:文件路径
-
mode:操作文件模式
·r:只读模式·f.read():读取全部 ·f.readline():逐行读取 ·f.readlines():读取全部,以列表形式返回 注意: 1、当文件不存在时会报错。 2、读取不可逆。
·w:写入
·f.writable():判断是否可写 ·f.write(str):写入内容,返回值为写入字符串的长度,同时注意传入的参数需要是字符串形式。 ·f.writelines(seq):写入多行,但需要自己添加换行符,同时注意传入的参数需要是列表形式。 注意: 1、只写模式,当文件不存在时,创建文件。 2、再次写入就为覆盖内容。
·a:追加
·f.write(str):写入内容,注意以字符串形式传入参数。返回值会字符串长度。 函数基本与之前模式相同。 注意: 1、追加模式下,当文件不存在时会创建文件。 2、再次写入为追加,不会覆盖之前内容。
· +:混合模式
·在模式后面跟个‘+’ 代表混合模式 ·r+:代表可读可写,但是以读模式为主导。 注意:r+ 因为以读为主导,所以当文件不存在的时候会报错,不会自动创建。 ·w+:以写模式为主导的可读可写。 注意: 1、w+以写模式为主导,当文件不存在的时候会自动创建,不会报错。 2、w+模式下read()函数读取内容:不会显示内容,因为每运行一次都在覆盖,但是是可读的。【可读可写,但读不出东西】 3、a+ 与w+同理
· wb:写入二进制方式
-
encoding:指定文件编码
·utf-8:当文件中文乱码时,则指定编码为utf-8解决。
只读模式下open(file, mode=‘r’, encoding=None): 打开文件
在只读模式下如果打开不存在的文件会报错。
解决方式:创建文件即可。
创建一个txt文件,并且随意写入内容。
xx.readable() :判断文件是否可读。返回布尔值。
xx.read():读取全部。【读取文件内的全部内容】。
解决读取内容出现乱码情况。中文情况下指定为utf8即可。
xx.read():在括号内填入数字代表读取的字符。【根据指针移动,从左往右、从上至下读取。不能返回读取。】
其中:数字 换行 汉字 都是一个字符
如图所示:read(3)代表txt文档中的123这个三个字符。 read(4)显示到123之后换行,不会显示字符‘你’,但是会显示换行效果。 read(5)显示到字符‘你’
xx.readline(self,limit):读取一行内容。根据指针移动读取。【即只能按行读取,但是不能返回再度读取或者跳着读取。】
limit:代表限制,readline本身就代表只能读取一行,如果传入的字符数大于一行的字符情况下就会限制只输出一行的内容。假如f.readline(7):打印结果还是123.因为第一行只有3个字符会换行。打印多行readline()的时候会发现每行之间都有换行。这是因为readline读取的每行都包含了换行符。同时print语句本身也包含换换行。
解决方法:后面接end=‘ ’
xx.tell():用来查看当前文件指针所处文件的位置。【即当前指针在哪里就会返回哪里】
返回的数字代表字节。字母数字代表一个自己。 换行符等符号代表2个字符。每个汉字代表3个字节。
如图所示,指针先从0开始。当打印一行之后3个字节同时还包含了readline本身包含换行当2个字节。所以指针显示5.
xx.seek(self, offset, when): 改变指针位置。
offset:输入整数,代表偏移量
when:默认整数为0【默认从头开始】。可以输入0,1,2。【1代表当前指针位置,2代表文件尾部位置】
xx.readlines(self, hint):读取所有,以列表形式返回。
hint: 传入整数代表超过第一行的字符个数才获取到第二行。否则只打印第一行。
readlines(3):返回得到 [‘123\n’]
readlines(6):返回得到[‘123\n’,’你好\n’]
可以通过列表索引获取对应元素,方便操作。
txt文档内容为:
123
你好
456
通过索引获取元素
xx.readlines()[索引号]:
索引0代表第一行。因为列表打印出时候 索引0 代表了123\n
去掉列表元素中的换行符
使用到 rstrip()函数:删除末尾指定字符。此处指定为换行符。
只写模式w open(file, mode=‘w’, encoding=None): 打开文件
在只写模式下,如果文件不存在那么会自动创建文件。
xx.writable():判断是否可写。返回布尔值。
f.write(str):写入内容,以字符串形式写入,并且返回写入的字符串长度。
直接使用函数,会发现在函数当前py文件下没有返回内容。
但是在test02这个文件内会发现写入的内容出现了。
当打印输出该函数后,得到的返回值为当前写入的字符串长度。
xx.write():覆盖
已知当前test02中有内容 “hello worldhello world” 当在demo1.py文件下使用write函数会覆盖之前内容。
注意中文情况:要设置万国码,不然会乱码。
xx.writelines(self, list):写入多行,以列表形式写入。
注意:如果要换行的话每个内容之间要写入换行符。
设置换行符后的效果图:
追加模式a: open(file, mode=‘a’, encoding=None): 打开文件
在只写模式会发现再次写入内容是覆盖内容,当需要在原有内容基础上新添新的内容,可以使用追加模式。
在a模式下,当文件不存在的时候会自动创建。
xx.write():写入内容
先写入一段内容
会在tese03文档中出现写入的内容
重新写入新的内容,如果在只写状态下,内容会被覆盖。但是在追加模式则不会。
追加的内容以及之前写入的内容都存在。
混合模式+:open(file, mode=’ +’, encoding=None): 打开文件
r+:文件不存在的时候读取会报错。但是可以读取文件内容,以及不完全覆盖内容。
写入内容:
在test中已有内容为
123
你好
456
当写入内容后不完全覆盖。
w+、a+:文件不存在时会自动创建文件。但是read函数读取文件时候内容被不断自动覆盖所以读取不到内容,为空。
自动创建了test04文件。并写入了内容。
在test04中有内容。读取不到内容
test04中为空白
二进制写入方式
需要在文档中写入二进制:
可以在open中的mode设置为wb模式,即:
open(‘路径’,‘wb’ )
如果不写入wb会报错。
写json文件
直接写入字典会报错。因为w模式下write只能写入字符串。
通过导入json模块调用json.jump()或者json.load()可以写json文件,与python文件的转换。
json.dump():字典转为json(适用于文件)【将python对象装为json对象】
json.dump(obj, fp)
fp:文件对象
obj:写入的数据
如图所示:
json.load():json转为字典(适用于文件)【将json对象转为python对象】
json.load(fp):
fp:文件对象
先导入json模块。之后调用json.load()函数,将json文件转为字典。
关闭文件f.close()、with open()
f.close()
通过f.close()关闭文件,释放资源。
首先:文档那的内容写入并不是立即写入的。
即:1、 f=open(‘test02.txt’, ‘w’)
2、f.write(‘hello world’)
3、f.close()
以上三步中,hello world这段内容在txt文档中不是在第二步就执行的,而是在第三步f.close()后才执行。
那么,当所要执行的内容过长等情况,容易出现报错。
此时,需要我们和异常捕获相结合。达到一个维护效果。
with open()
with open(): 上下管理器。with语句会自动触发_exit _()关闭文件,所以不需要f.close()语句
由于这个不能赋值变量,只能as 重命名。
和open的操作基本一致。