Python之文件操作
Posted Balllyh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之文件操作相关的知识,希望对你有一定的参考价值。
一、文件读写模式
python文件的读写很简单,仅仅是一个open函数。
打开文件方式有:
open(绝对路径/\'文件名’,读写模式,encoding=\'utf-8\'),open这种方式打开文件,操作后,要关闭文件;
with open(\'文件名‘,读写模式,encoding=\'utf-8\')as f.with这种方式打开文件,自动会关闭文件。
文件操作的三步骤:
1、打开文件获取文件句柄,句柄就理解是这个文件;
2、通过文件句柄操作文件
3、关闭文件
注意:理解句柄的概念
在stdio.h中声明 typedef struct{ short level; //缓冲区满与空的程度 unsigned flags; //文件状态标志 char fd; //文件描述符 unsigned char hold; //无缓冲区,不读字符 short bsize; //buffer大小 unsigned char *curp; //当前指向 unsigned istemp; //临时文件知指示 short token; //有效性检测 } FILE;
为了管理打开的文件,系统为所有文件创建了一个打开文件信息的结构体数组,文件句柄就是每个文件的唯一标识符,是文件在内存中的存储位置。句柄顾名思义,打开后要关闭才能再次打开。所以更新文件后,一定要先关闭文件,再次读取读到更新后的文件内容。
文件读取模式:
fr=open(\'a.txt\',\'r\') print(fr.read()) fr.write(\'qiuqiqu,123456QQ\') print(fr.read()) 运行结果: liuyihan,123456YH Traceback (most recent call last): File "E:/自动化测试/LYH_python/Day4作业/file.py", line 3, in <module> fr.write(\'qiuqiqu,123456QQ\') io.UnsupportedOperation: not writable
r:只读模式,打开不存在的文件时,报错;读完文件后,文件指针在末尾
w:只读模式,会清空原来的文件内容;打开不存在的文件时,直接帮你新建一个文件;
a:追加写模式,在原文件内容末尾追加新内容;打开不存在的文件时,直接帮你新建一个文件。
r+:可读,可写,可追加模式,打开不存在的文件时,帮你新建一个文件。
a.txt文件内容:、 liuyihan,123456NN qiuuqiu,123456QQ nuanuan,123455NN fr=open(\'a.txt\',\'r+\') fr.write(\'niuhanyang,123456NN\') print(fr.read()) 运行结果: qiuqiu,123456QQ nuanuan,123455NN
以上程序,你有看懂吗?文件写时,文件指针在首行,所以liuyihan,123456YH 被修改为niuhanyang,123456NN,这时文件指针在第二行。读取文件时,read()将第二行和第二行以后的内容读出来。所以显示结果如上图所示。
w+:写读模式,写时会把原来文件内容清空,可读取已写入的文件内
a+:追加读写内容,不存在的文件会自动创建,存在则只追加内容。
file.txt文件内容: liuyihan,123456YH qiuqiu,123456QQ fr=open(\'a.txt\',\'a+\') fr.write(\'niuhanyang,123456NN\\n\') fr.seek(0) print(fr.read()) 运行结果: liuyihan,123456YH qiuqiu,123456QQ niuhanyang,123456NN
上面程序,若不加fr.seek(0),读取结果为空,因为追加写,文件指针在末尾,读取时读不到东西,seek()方法就是把文件指针指向那个位置。0代表首行。
二、文件操作方法
f = open(\'file.txt\',\'a+\',encoding=\'utf-8\') f.read()#读取文件所有内容,返回字符串类型 f.readline()#读取文件第一行内容,返回字符串类型 f.readlines()#一行一行读,获取文件所有内容,返回一个List,文件的每行内容作为List的每个元素 f.write()#将字符串写入文件,只能是字符串类型 f.writelines()#将一个序列字符串列表写入文件,需要换行时自己手动添加\\n f.seek(0)#文件指针指向哪个位置 f.tell()#获取当前文件的指针指向 f.flush()#写入数据后,立即把数据从内存写到磁盘中 f.truncate()#清空文件内容
import os
os.remove(\'file.txt\')#删除文件
os.rename(\'file.txt\',\'new_file.txt\')#文件重命名
注意:用上方read()和readlines()方法操作文件时,当文件很大时,会将文件所有内容读到内存中,很容易引起内存撑爆。高效的操作就是,读一行操作一行,然后读过的内容从内存中释放。如以下代码:
三、修改文件
修改文件有两种方式:
第一种:读取文件所有内容,将文件内容修改后,清空文件所有原内容,再将修改后的文件内容重新写入;
注意:指明文件绝对路径时,路径中若含有\\t、\\n、\\s等转义字符,在路径前加r,意思是文件路径中的\\t、\\n等不是转义字符。
第二种:将修改后的内容写入一个新文件。
四、处理json字符串
S=\'\'\' { "error_code": 0, "stu_info": [ { "id": 309, "name": "小白", "sex": "女", "age": 26, "addr": "河南省济源市北海大道32号", "grade": "天蝎座", "phone": "18512572946", "gold": 100 }, { "id": 310, "name": "小黑", "sex": "男", "age": 26, "addr": "河南省济源市北海大道32号", "grade": "天蝎座", "phone": "18516572946", "gold": 120 } ] } \'\'\' mport json res = json.loads(S) #json串(字符串),转成字典 print(res)#打印出字典 stus={\'xiaojun\':\'123456\',\'xiaohei\':\'7891\',\'tanailing\':\'11111\' ,\'海龙\':\'111\'}#定义一个字典 res2=json.dumps(stus,indent=8,ensure_ascii=False)#将字典转换成json字符串,Ensure_ascii=False是防止中文报错 print(res2)#打印出json字符串 with open(\'stus.json\',\'w\',encoding=\'utf-8\') as f:#将字典转换成json字符串,然后再写入文件stus.json中 f.write(res2)
以上程序,最终创建了一个stus.json文件,里面内容为json类型
4.1如何从文件中读取json数据
第一种方式:用loads(),将文件的所有内容读出来(json字符串类型),转换成字典,再打印出字典,从而获取到文件内容
第二种方法:用load(),直接操作文件,将json字符串转换成字典,再打印出字典,从而获取文件内容。
4.2 如何将json数据写入文件
第一种方法:用dumps(),将字典转换成json字符串类型,再写入文件
第二种方法:用dump(),直接操作文件,传入字典和文件,将字典直接转换成json字符串类型,写入文件。
、
注意:从上述程序,不难发现,很好记忆,带s的函数是处理json字符串的,不带s的可直接处理文件。
以上是关于Python之文件操作的主要内容,如果未能解决你的问题,请参考以下文章