python基础之文件操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础之文件操作相关的知识,希望对你有一定的参考价值。
文件操作的基本流程
计算机系统分为:计算机硬件,操作软件,应用程序三部分。
通过文件操作就可以将数据永久保存下来。
1,打开文件,得到文件句柄并赋值给一个变量
f = open(‘文件名‘,‘r/w‘,encoding= ‘utf-8‘ )
th open(‘源文件‘,encoding=‘utf-8‘) as f: #打开文件,自带关闭功能 pass with 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\n print(‘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 fh print(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 gbk f.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 os os.remove(‘原文件‘) os.rename(‘原文件.bak‘,‘原文件‘) 进阶例子 #1.创建一个新文件 f2 = open(‘原文件.bak‘,‘w‘,encoding=‘utf-8‘) #2.把原来的文件中的内容读出来 f = open(‘原文件‘,encoding=‘utf-8‘) count = 0 for 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 os os.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 os os.remove(‘原文件‘) os.rename(‘原文件.bak‘,‘原文件‘)
以上是关于python基础之文件操作的主要内容,如果未能解决你的问题,请参考以下文章