hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

Python的文件操纵

2019-11-18杂谈搜奇网60°c
A+ A-

 

Python的文件操纵

一. 初识Python文件操纵

运用python来读写文件是异常简朴的操纵. 我们运用open()函数来翻开一个文件, 猎取到文件句柄. 然后经由过程文件句柄就能够进行林林总总的操纵了,

依据翻开文件形式差别能够实行的操作也会有响应的差别。

二,文件的形式: r(只读)w(只写)a(追加) r+(读写)w+(写读)a+(追加写读)rb, wb, ab, r+b, w+b, a+b 默许运用的是r(只读)

形式的函数

open(文件名(途径), mode="形式", encoding="编码集"("gbk","UTF-8",等等))

2.1只读操纵(r,rb)

1 #"E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt"(为要读取当前文件地点的途径/位置)
2 #mode ="r"(为只读形式)
3 #encoding ="UTF-8"(为字符集)
4 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="r",encoding ="UTF-8")
5 du = el.read() #read()(为浏览的意义)
6 print(du)
7 el.close() #close()为封闭文件,要养成优越的习气翻开了就要封闭

须要注重encoding示意编码集,依据文件的现实保留编码举行猎取数据,关于我们而言,更多的是utf-8

2.2rb,读取出来的数据是bytes(字节)范例,在rb形式下,不能挑选encoding字符集

1 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="rb")
2 du = el.read()  #read()为读的意义
3 print(du)
4 el.close()  #close()为封闭文件,要养成优越的习气翻开了就要封闭

 效果为:b'Python\xe5\xad\xa6\xe5\xbe\x97\xe5\xa5\xbd\xe5\x9d\x90\xe7\x89\xa2\xe5\xba\xa7\xe5\xbe\x97\xe6\x97\xa9\r\nPython\xe5\xad\xa6\xe4\xb8\x8d\xe5\xa5\xbd\xe6\x90\xac\xe7\xa0\x96\xe6\x90\xac\xe5\x88\xb0\xe8\x80\x81\r\n\xe7\xaa\x97\xe5\xa2\x99\xe6\x98\x8e\xe6\x9c\x88\xe5\x85\x89\r\n\xe7\x96\x91\xe6\x98\xaf\xe5\x9c\xb0\xe4\xb8\x8a\xe9\x9c\x9c\r\n\xe4\xb8\xbe\xe5\xa4\xb4\xe6\x9c\x9b\xe6\x98\x8e\xe6\x9c\x88\r\n\xe4\xbd\x8e\xe5\xa4\xb4\xe6\x80\x9d\xe6\x95\x85\xe4\xb9\xa1\r\n\xe5\xad\xa6Python\xe5\xb0\xb1\xe6\x98\xaf\xe8\xa6\x81\xe5\x9d\x9a\xe6\x8c\x81\xef\xbc\x81\xef\xbc\x81\xef\xbc\x81\r\n'

rb的作用:在读取非文本文件的时刻,比方MP3,图象,视频等信息的时刻就须要用到rb,由于这类数据是没办法直接显现出来的在背面我们文件上传下载的时刻还会用到,另有我们看的直播实质上就是这类数据经由编译后才一般显现出来,这类常人是看不懂的,只要机械能看懂!

绝对途径和相对途径:

1.绝对途径:从低往上翻意义就是,从磁盘根目录最先一直到须要的文件名

2. 相对路径:同一个文件夹下的文件相关于当前这个顺序地点的文件夹而言假如在同一个文件夹中. 则相对路径就是这个文件名. 假如在上一层文件夹. 则要../

引荐运用相对途径:由于在我们把顺序拷贝给他人运用的时刻,直接把项目拷贝走就能够运转,然则假如用绝对途径,哪还须要拷贝外部的文件

2.3读取文件的要领:

1.read()将文件中的内容悉数读取出来,弊病:占内存假如文件过大轻易致使内存崩溃

 1 #"E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt"(为要读取当前文件地点的途径/位置)
 2  #mode ="r"(为只读形式)
 3 #encoding ="UTF-8"(为字符集)
 4 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="r",encoding ="UTF-8")
 5 du = el.read()  #read(),为浏览的意义
 6 print(du)
 7 el.close()  #close()为封闭的意义
 8 效果为:
 9 Python学得好下狱座得早
10 Python学不好搬砖搬到老
11 窗墙明月光
12 疑是地上霜
13 举头望明月
14 垂头思老家
15 学Python就是要对峙!!!

2. read(n)读取n个字符

1 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="r",encoding ="UTF-8")
2 du = el.read(6)  #效果显现为Python由于英文一个字符代表一个字母,如果换坐中文这里就会显现出连个中文!
3 print(du)
4 el.close()
5 效果为;
6 Python

须要注重的是,假如再次运转顺序读取,那末会在当前位置继承去读而不是重新读!!!

 1 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="r",encoding ="UTF-8")
 2 du = el.read(6)
 3 du1 = el.read(6)
 4 du2 = el.read(6)
 5 print(du)
 6 print(du1)
 7 print(du2)
 8 el.close()
 9 效果为;
10 Python
11 学得好下狱座
12 得早
13 Pyt

假如运用rb形式,则读取出来的是n个字节

1 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="rb")
2 du = el.read(15)
3 print(du)
4 el.close()
5 效果为:
6 b'Python\xe5\xad\xa6\xe5\xbe\x97\xe5\xa5\xbd'

3.readline()一次读取一行数据,注重:readline()末端,注重每次读取出来的数据都邑有一个\n所以,须要我们运用strip()要领来去掉\n或许空格,

在readline()背面加.strip()即可。

 1 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="r",encoding="UTF-8")
 2 du = el.readline()    #readline()为每次打印一行
 3 du1 = el.readline()  4 du2 = el.readline()  5 du3 = el.readline()  6 print(du)
 7 print(du1)
 8 print(du2)
 9 print(du3)
10 el.close()
11 效果:
12 
13 Python学得好下狱座得早
14 
15 Python学不好搬砖搬到老
16 
17 窗墙明月光
18 
19 疑是地上霜

4.reanlines()将每一行构成一个元素,放到一个列表,将一切的内容读取出来,所以轻易涌现内存崩溃,不引荐运用

 1 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="r",encoding="UTF-8")
 2 du = el.readlines() #每一行构成一个元素, 放到一个列表中
 3 print(du)
 4 el.close()
 5 for lie in du:
 6 print(lie.strip())  #strip去空格等等
 7 效果:
 8 ['Python学得好下狱座得早\n', 'Python学不好搬砖搬到老\n', '窗墙明月光\n', '疑是地上霜\n', '举头望明月\n', '垂头思老家\n', '学Python就是要对峙!!!\n']
 9 Python学得好下狱座得早
10 Python学不好搬砖搬到老
11 窗墙明月光
12 疑是地上霜
13 举头望明月
14 垂头思老家
15 学Python就是要对峙!!!

5.轮回读取,这类体式格局是组好的,每次读取一行内容,不会发生内存溢出题目

 1 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="r",encoding="UTF-8")
 2 for lie in el:
 3 print(lie.strip())
 4 效果;
 5 Python学得好下狱座得早
 6 Python学不好搬砖搬到老
 7 窗墙明月光
 8 疑是地上霜
 9 举头望明月
10 垂头思老家
11 学Python就是要对峙!!!

注重:读取完的文件记得肯定要封闭,要养成优越的习气,el.close()

三,写形式(w, wb)

写读的时刻注重:假如没有文件,则会自动建立文件,假如文件存在则会将原件中本来的内容清空,再写入新的内容

wb形式下,能够不指定翻开文件的编码,然则再写文件的时刻必需将字符串转换为utf-8的bytes(字节)数据

1 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="wb")
2 el.write("我是YJ呀!!!".encode("utf-8"))
3 el.flush()   #革新
4 el.close()  #封闭
5 效果为:
6 我是YJ呀!!!由于写入之前会清空内里的内容

四,追加(a, ab)

在追加形式下,我们写入的内容会追加在文件的末端

1 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="a",encoding = "utf-8")
2 el.write("要加油要对峙!!!")
3 el.flush()   #革新
4 el.close()  #封闭
5 效果:
6 我是YJ呀!!!要加油要对峙!!!

五,读写形式(r+,r+b)

关于读写形式,必需是先读后写,由于默许光标着实开首的,预备读取的,读完后再举行写入,由于当读完后光标是在背面的,我们今后运用频次最高的形式是r+

注重注重肯定肯定要一般读完以后,再写入,不然开首的内容会改成你写入的内容覆盖掉

1 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="r+",encoding = "utf-8")
2 du = el.read() #先读
3 el.write("胜利就在面前!!!",encode("utf-8"))
4 print(du)
5 el.flush() #革新
6 el.close() #封闭

 六,写读(w+,w+b)

先将一切内容清空,然后写入,末了读取,然则读取的内容是空的,不经常使用

1 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="w+",encoding = "utf-8")
2 el.write("胜利就在面前!!!")
3 du = el.read()
4 print(du)
5 el.flush()   #革新
6 el.close()  #封闭
7 输出效果什么也看不到由于写完光标在背面,读的时刻最先光标在背面最先读背面没用内容所以读出来是空缺的

七,追加读(a+)

a+形式下,不管先读照样后读,都是读取不到数据的

1 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="a+",encoding = "utf-8")
2 el.write("YJ加油!")
3 du = el.read()  #浏览
4 print(du)
5 el.flush() #革新
6 el.close() #封闭
7 效果:看不到,要翻开文件才看到最加的内容,追加的内容为(YJ加油!)

八. 经常使用的操纵

1. 光标(seek),光标搬动到n位置,注重,搬动的单元是byte(字节),所以假如是UTF-8的中文部份要3的倍数,意义就是一个字要三个字节
搬动到开首:seek(0) 
搬动到末端:seek(0,2) ,seek的第二个参数示意的是从哪一个位置举行偏移,默许是0,示意开首,1示意当前位置,2示意末端

 1 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="r+",encoding = "utf-8")
 2 el.seek(0)  #光标搬动开首
 3 du = el.read()  #读取内容此时光标搬动到末端
 4 print(du)
 5 el.seek(0)   #再次将光标搬动到开首
 6 el.seek(0,2)  #将光标搬动到末端
 7 du1 = el.read() #读取内容什么也没有读到由于此时光标在背面
 8 print(du1)
 9 
10 el.seek(0)  #光标搬动到开首
11 el.write("哈哈哈")  #写入信息,此时光标在9,由于中文3个字节代表一个字符3*3=9
12 el.flush()  #革新
13 el.close()  #封闭
14 效果:
15 YJ加油!YJ加油!YJ加油!YJ加油!哈哈哈

2. tell() 运用tell()能够帮我们猎取到当前光标在什么位置

 1 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="r+",encoding = "utf-8")
 2 el.seek(0)  #光标搬动开首
 3 du = el.read()  #读取内容此时光标搬动到末端
 4 print(du)
 5 el.seek(0)   #再次将光标搬动到开首
 6 el.seek(0,2)  #将光标搬动到末端
 7 du1 = el.read() #读取内容什么也没有读到由于此时光标在背面
 8 print(du1)
 9 el.seek(0)  #光标搬动到开首
10 el.write("哈哈哈")  #写入信息,此时光标在9,由于中文3个字节代表一个字符3*3=9
11 
12 print(el.tell())    #此时猎取光标地点的位置,中文一个字三个光标为一个字,由于中文3个字节代表一个字符
13 
14 el.flush()  #革新
15 el.close()  #封闭

3. truncate 截断文件

 1 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="w",encoding = "utf-8")
 2 el.write("哈哈")    #写入两个字符
 3 el.seek(3)  #光标搬动到3,就是两个字的中心
 4 el.truncate()   #删除光标背面的一切内容
 5 el.close()  #封闭
 6 
 7 
 8 el = open("E:\PyCharm\YJ\day8-2019-11-5\YJ呀.txt",mode ="r+",encoding = "utf-8")
 9 du = el.read(3)  #读取12个字节,意义就是三个字
10 el.seek(4)  
11 print(el.tell())
12 el.truncate()   #删掉背面的一切内容
13 el.flush()  #革新
14 el.close()  #封闭

注重!!!:在r+形式下,假如读取内容,不管读取内容若干,光标显现的是若干,再次写入或许操纵文件的的时刻都是在末端举行的操纵,所以假如想做截取操纵,记住了,先要搬动光标,搬动到你想要截取的位置,然后再举行截取关于truncate(n),假如给出了n,则从开首举行截取,假如不给n,则从当前位置截取,背面的内容将会被删除

九. 修正文件以及另一种翻开文件的体式格局

文件修正,只能将文件中的内容读取到内存中,将信息修正终了,然后将文件删除,将新文件的名字修正成老文件的名字
1. 引入os模块
2. 翻开目的文件, r
3. 翻开文件副本, w
4. 从r中读取内容举行修正. 写入到副本中
5. 删除源文件
6. 重命名副本

弊病:一次将文件一切内容举行读取,内存溢出,会致使机械崩溃,解决方案:写for轮回一行一行的读取和操纵

2019年11月6日

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
Python的文件操纵

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282395.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>