python之路13--之文件的所有操作
一、文件操作的说明文件操作:
1、文件路径:d:\\file.txt
2、编码方式:utf-8 gbk
3、操作方式:只读、只写、追加、读写、写读
4、以什么编码格式存储的文件就要以什么编码格式打开,否则会乱码
5、如果打开了文件读取完后不关闭文件,读取完一遍后光标会停留在文件的结尾,而不是开头,需要将光标移动至文件开头,或者关闭文件。
二、文件的所有操作
1、文件的读操作
1、读取文件的全部内容(如果文件过大会卡住,因为占用内存太大了) f = open('file','r',encoding='utf-8').read() #1、文件路径(相对路径)、2、对文件的操作方法、3、字符编码、.read()为读 print(f) 2、循环打印文件的前5行内容,readline:按行获取文件内容 f = open('file','r',encoding='utf-8') for i in range(5): print(f.readline()) #循环打印文件的前五行 3、循环获取文件内容,不想要第十行的内容,并在第十行打印----------分割线------------------ f = open("file",'r',encoding="utf-8") count = 0 for line in f: if count == 9: print("----------分割线------------------") count += 1 continue print(line.strip()) count += 1 4、以bytes类型读取文件,对非文字类文件的操作,或者上传下载的操作 f = open('file',mode='rb',).read() print(f) 5、指定光标的位置获取文件内容 f = open('file2',mode='r+',encoding='utf-8') f.seek(3) #seek是按照字节来调整光标的位置,将光标的位置移动到第三个字节这里{注意:utf8编码三个字节代表一个中文字符,也就是说如果是中文,将光标调整到2时会报错} print(f.tell()) #获取光标的位置 print(f) f.close() 6、读取文件最后两个字 f = open('file2',mode='a+',encoding='utf-8') #以追加读的方式打开file2 f.write('欧阳奇异') #再file2的结尾追加 欧阳奇异 f.seek(f.tell()-6) #设置光标的位置为:tell -6{因为再结尾追加光标默认在最后,-6就是倒数地6个字符,也就是两个汉字} print(f.read()) #打印结果为奇异 f.close 7、获取文件的前三个字 f = open('file2',mode='r+',encoding='utf-8') print(f.read(3)) #仅打印file1文件里的三个字节 f.close 8、文件打开的另一种写法 with open('file2',mode='a+',encoding='utf-8') as f: #这种打开文件的方法再操作完文件后就不需要使用close关闭文件了 print(f.readline()) with open('file2',mode='a+',encoding='utf-8') as f,open('file1',mode='a+',encoding='utf-8') as f1: #也可以同时打开两个文件 print(f.readline(),f1.readline())
2、文件的写操作
说明:
之前没有这个文件则创建这个文件,
如果之前有这个文件则会覆盖掉之前文件的内容(先将源文件的内容清除,然后再写)
1、文件的写操作 f = open("file1",mode='w',encoding="utf-8") f.write("welcome to www.71net.com") f.close() 2、使用bytes类型的写操作 f = open('file2',mode='wb') f.write("奇异网".encode('utf-8')) f.close() 3、文件的追加操作 f = open('file1',mode='a',encoding='utf-8') f.write('\nwww.71box.net 奇异盒子') f.close() 4、以bytes类型追加 f = open('file1',mode='ab') f.write('\nwww.71so.cn 奇异搜'.encode('utf-8')) f.close()
3、 文件的读写操作
说明:
1、先读后写:先执行读的操作后,光标移动到文件的末尾,然后再进行写的操作,那么写入的东西就写到文件的结尾了
2、先写后读:先执行写的操作,默认光标在文件的开头,此时执行写的操作会在文件开头写,那样就会覆盖文件的内容,源文件的内容不会向后移,只会被覆盖
总结:执行文件的写操作之前一定要确定光标的位置
1、读写 f = open('file2',mode='r+',encoding='utf-8') print(f.read()) #先做读取操作,读完文件后此时光标在文件的结尾 f.write('www.71.ink') #然后写入www.71.ink f.close() 2、以bytes类型读写 f = open('file2',mode='r+b') print(f.read()) #先做读取操作,读完文件后此时光标在文件的结尾 f.write("黑马".encode('utf-8')) #然后写入黑马 f.close()
4、文件的写读操作(慎用)
说明:如果源文件里面有内容会将原文件的内容清空后,然后再写入,如果之前没有文件,则创建文件
1、文件的写读操作 f = open('file2',mode='w+',encoding='utf-8') f.write('www.71.ink') f.seek(0) #调整光标的位置 print(f.read()) #读取文件的内容 f.close() 2、以bytes类型的写读操作 f = open('file2',mode='w+b') f.write('www.hm.ink'.encode('utf-8')) f.seek(0) print(f.read()) f.close()
5、文件的追加读操作
1、文件的追加读操作 f = open('file2',mode='a+',encoding='utf-8') #以追加读的方式打开文件 f.write("欧阳奇异") #写入欧阳奇异 f.seek(0) #调整光标位置 print(f.read()) #读取文件的全部内容 2、以bytes类型的文件追加读操作 f = open('file2',mode='a+b') f.write("奇异网络 www.71net.com".encode('utf-8')) f.seek(0) print(f.read().decode('utf-8')) f.close()
6、文件的一些其他操作方法
1、进度条实现 import sys,time for i in range(100): sys.stdout.write("# ") sys.stdout.flush() time.sleep(0.3) 2、换行符转换(windows的换行符为:\r\u,而在linux上换行符为:\n,如果想在linux系统上读取windows系统的文件可以使用以下方式 ) f = open("file","rU",encoding="utf-8") #rU or r+U:表示在读取时,可以将\r\n自动替换为\n, f = open("file","r+U",encoding="utf-8")
f = open('file2',mode='a+',encoding='utf-8') print(f.readable()) #判断文件是不是可读的,是则返回True、不是则发挥False print(f.readlines()) #每一行当成列表中的一个元素,添加到列表中,以列表的形式显示 print(f.truncate(2)) #对源文件进行截取,指定size大小为2表示源文件只保留两个字符 print(f.seekable()) #判断是否可以调整光标,可以则返回True、不可以则返回False print(f.writable()) #判断是不是可写的,是则返回True、不是则返回False print(f.encoding) #获取文件编码格式 print(f.name) #打印当前文件的名字 print(f.isatty()) #判断是不是终端设备,是则返回True,不是则返回False print(f.flush) #将数据刷新到磁盘 print(f.closed) #判断文件是否关闭了,关闭了则返回True,没有关闭则返回False
6、文件的修改操作
f = open("file2","r",encoding="utf-8") f_new = open("file2.new","w",encoding="utf-8") for line in f: if "奇异" in line: line = line.replace("奇异","欧阳奇异") f_new.write(line) import os os.remove('file2') #删除文件 os.rename('file2.new','file2') #重命名文件 f.close() f_new.close()
with open('file',encoding='utf-8') as f,open('file.bak','w',encoding='utf-8') as f2: for line in f: if '呵呵' in line: #找需要替换的关键词 line = line.replace('呵呵','哈哈') #‘需要替换的原内容’,‘需要替换的新内容’ #写文件 f2.write(line) #将新内容写入到新文件里 import os os.remove('fiel') #删除文件 os.rename('file.bak',file') #重命名文件
下面是画图说明文件的修改原理:


浙公网安备 33010602011771号