文件操作的基本流程
计算机系统分为:计算机硬件,操作软件,应用程序三部分。
通过文件操作就可以将数据永久保存下来。
1,打开文件,得到文件句柄并赋值给一个变量
f = open('文件名','r/w',encoding= 'utf-8' )
th open('源文件',encoding='utf-8') as f: #打开文件,自带关闭功能 passwith open('原文件名',encoding='utf-8') as f,open('原文件名.back','w',encoding='utf-8') as f: pass #两个文件连用修改,可连用多个,自带关闭功能
2,通过句柄对文件进行操作
data = f.read() #也可以是写
3,关闭文件
f.close()
注意:1,由应用程序向操作系统发起系统调用open(......)
2,操作系统打开该文件,并返回一个文件句柄给应用程序3,应用程序将文件句柄赋值给变量 f
关闭文件注意事项
1,
1,f.close() #回收操作系统级打开的文件
2,
del f #回收应用程序级的变量
#1,打开文件的模式有(默认为文本模式)# r-------只读模式(默认模式,文件必须存在,不存在则抛出异常)# w-------只写模式(不可读,不存在则创建,存在则清空内容)# a-------只追加模式(不可读,不存在创建,存在追加内容)# 2,对于非文本文件,只能使用b模式,‘b’表示字节的方式操作(而所有文件都是以字节的形式存储的,使用这种模式无须考虑文本文件的字符编码,图片文件的jgp格式,视频文件的avi格式)#3,'+'表示可以同时读写某个文件# r+,读写(可读可写)# w+,写读(可读可写)# a+,写读(可读可写)# x,只读模式(不可读,不存在则创建,存在报错)# x+,写读(可读可写)
首先创建一个文件,在进行读写操作:
1,读
#打开文件# f = open('歌词','r',encoding='utf-8')f = open('歌词',encoding='utf-8')#1.读文件的第一种方式:read方法,用read方法会一次性的读出文件中的所有内容content = f.read()print('read : ',content)#2.读一部分内容:read(n),指定读n个单位print(f.read(5))#3.读文件的第三种方式:按照行读,每次执行readline就会往下读一行content = f.readline()print('readline : ',content.strip()) #strip去掉空格、制表符、换行符content2 = f.readline()print(content2.strip())print(1) #--> 1\nprint('1\n') #--> 1\n\n#4.读文件的第四种方式:readlines,返回一个列表,将文件中的每一行作为列表中的每一项返回一个列表content = f.readlines()print('readlines : ',content)#5.读:最常用for l in f: print(l.strip())#关闭文件f.close()
f = open('shoplist',encoding='utf-8') #读文件并整理成需要的数据类型goods_list = []for line in f: if line.strip(): goods_dic = { 'name':None,'price':None} line = line.strip() goods_lst = line.split() print(goods_lst) goods_dic['name'] = goods_lst[0] goods_dic['price'] = goods_lst[1] goods_list.append(goods_dic)print(goods_list)f.close()f = open('shoplist',encoding='utf-8') #只显示文件中有内容的行goods_list = []for line in f: if line.strip(): print(line.strip())f.close()
2,写
# 习惯叫 f file f_obj f_handler fhprint(f.writable()) #判断文件是否可写print(f.readable()) #判断文件是否可读f.write('7018201890') #写文件的时候需要写数字,需要把数字转换成字符串f.write('aasjgdlwhoojfjdaj')f.write('iq349jdsh\n')f.write('aks')f.write('\nsdgawo') #文件的换行f.write('志强德胜') #utf-8 unicode gbkf.close()
3,光标移动
f = open('歌词','r+',encoding='utf-8')#seek 光标移动到第几个字节的位置f.seek(0) 移动到最开始f.seek(0,2) 移动到最末尾f.truncate(3) #从文件开始的位置只保留指定字节的内容f.write('我可写了啊')tell 告诉我光标在第几个字节seek移动光标到指定位置content = f.readline()print(content.strip())tell告诉你当前光标所在的位置print(f.tell())f.seek(4) #光标移动到三个字节的地方‘\r\n’content = f.read(1) #读一个字符print('***',content,'***')content = f.readline()print(content.strip())print(f.tell())f.close()
文件的换行: \r,\n,\r\n都可表示换行
文件内的光标移动
4.文件修改:
#文件的修改#1.创建一个新文件f2 = open('原文件.bak','w',encoding='utf-8')#2.把原来的文件中的内容读出来f = open('原文件',encoding='utf-8')old_content = f.read() #'原来的内容\n'#3.操作读出来的字符串,把字符串中的内容替换掉new_content = old_content.replace('新','原来')#4.把替换之后的内容写到新文件里f2.write(new_content)f.close()f2.close()# #5.删除原文件,新文件重命名成源文件的名字import os #os模块os.remove('原文件') #删除文件os.rename('原文件.bak','原文件') #重命名 #replace(‘老内容’,‘新内容’)文件的删除import os #os模块os.remove('原文件') #删除文件#1.创建一个新文件f2 = open('原文件.bak','w',encoding='utf-8')#2.把原来的文件中的内容读出来f = open('原文件',encoding='utf-8')for line in f: new_line = line.replace('原来','新') f2.write(new_line)f.close()f2.close()import osos.remove('原文件')os.rename('原文件.bak','原文件')进阶例子#1.创建一个新文件f2 = open('原文件.bak','w',encoding='utf-8')#2.把原来的文件中的内容读出来f = open('原文件',encoding='utf-8')count = 0for line in f: if '原来' in line and count == 0: new_line = line.replace('原来','新') f2.write(new_line) count = 1 else: f2.write(line)f.close()f2.close()import osos.remove('原文件')os.rename('原文件.bak','原文件')with操作文件f = open('原文件',encoding='utf-8')content = f.read()print(content)f.close()with open('原文件',encoding='utf-8') as f: # content = f.read() # print(content) for line in f: print(line.strip())with open('原文件',encoding='utf-8') as f,open('原文件.bak','w',encoding='utf-8') as f1: for line in f: new_line = line.replace('原来','新') f1.write(new_line)import osos.remove('原文件')os.rename('原文件.bak','原文件')