文件操作
打开文件
f = open('歌词','w',encoding='utf-8')
# f:文件操作符 文件句柄 文件操作对象
# 习惯叫f file f_obj f_handler fh
open打开文件是依赖了操作系统的提供的途径 操作系统有自己的编码,open在打开文件的时候默认使用操作系统的编码 win 是gbk编码形式,Mac和Linux是使用的utf-8编码形式
print(f.writable()) #判断文件是否可写print(f.readable()) #判断文件是否可读f.write('123456') #写文件的时候需要写数字,需要把数字转换成字符串print(f.write('123456')) #返回值表示占有的字符数,如果带有\n,需要再加1个字节f.write('asdff')f.write('isfgs\n') #\n 文件的换行f.write('\ndljf') #\n在后面,表示本次写入完成后,下一次再写入的内容会换行,\n在前面,表示本次写入的内容会在下一行显示
文件处理的步骤: f = open('歌词','w',encoding='utf-8') f.write('46564') f.close() del f #可写可不写
关闭文件详解:操作系统级别的关闭文件资源:f.close() del f 主动释放了一个python程序内存中的变量,可写可不写 找到文件详解:文件与py的执行文件在相同路径下,直接用文件的名字就可以打开文件 文件与py的执行文件不在相同路径下,用绝对路径找到文件 文件的路径:需要用取消转译的方式来表示,有两种形式:r 或\\ 如果以写文件的方式打开一个文件,那么不存在的文件将会被创建,存在的文件之前文件中的内容将会被清空 f = open(r'C:\Users\Administrator\Desktop\a.txt','w',encoding='utf-8') f = open('C:\\Users\\Administrator\\Desktop\\a.txt','w',encoding='utf-8') f.write('哈哈哈') f.close()
打开文件:f = open('歌词','r',encoding='utf-8')1. 读文件的第一种方式:read,用read方法会一次性的读出文件中的所有内容content = f.read()f.close()print(content)2. 读一部分内容:read (n),指定读n个单位(包含转行符)f = open('歌词','r+',encoding='utf-8')content = f.read(2)f.close()print(content)3. 读文件的第三种方式:按照行读,每次执行readline就会往下面再读一行(从上一次读取结束的位置往下读取一行)content = f.readline()f.close()print(content.strip()) #strip去掉空格,制表符,换行符4.读文件的第四种方式:readlines 返回一个列表,将文件中的每一行作为列表中的每一项返回一个列表content = f.readlines()print(content,type(content)) #['wenwen\n', '123\n', 'hello\n', 'das']5.读:最常用for i in f
b:图片,音乐,视频等任何文件,用于传输:上传和下载,在网络编程中会详细讲解 f = open('歌词','rb') content = f.read() print(content) f.close()
一般情况下:文件操作,要么读,要么写,很少会用到读写、写读同时用的
常用的:r , w , arb ,wb ,ab不需要指定编码了f = open('歌词','rb')content = f.read()f.close()print(content)f2 = open('歌词2','wb')f2.write(content)f2.close()
r+ 可读可写:1.先读后写:写是追写 2.先写后读:从头开始写f = open('歌词','r+',encoding='utf-8')line = f.readline()print(line)f.write('0000')f.close()w+ 可写可读:一上来文件就清空了,尽管可读:1,但是你读出来的内容是你这次打开文件新写入的 2,光标在最后,需要主动移动光标才可读f = open('歌词','w+',encoding='utf-8')f.write('abc\n')f.write('哇哈哈')f.seek(0) #光标跳到最开始的地方才可以读取到内容,在新增过文件内容后光标是在最后面的print(f.read())f.close()seek 光标移动到第几个字节的位置f.seek(0) #移动到最开始f.seek(0,2) #移动到最末尾print(f.readline())tell 告诉我光标在第几个字节f = open('歌词','r+',encoding='utf-8')print(f.seek(0,2))print(f.tell())f.truncate(3)seek 移动光标到指定位置(去最开始,去最结尾)truncate:文件中只保留n个字节
注意: 1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的 2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了, 所以truncate要在r+或a或a+等模式下测试效果
购物车
f = open('shoplist',encoding='utf-8')goods_dict = {}for line in f: line = line.strip() goods_list = line.split() goods_dict[goods_list[0]] = goods_list[1:]print(goods_dict,type(goods_dict))f = open('shoplist',encoding='utf-8')goods_list = []for line in f: goods_dic = { 'name':None,'price':None,'数量':None} line = line.strip() goods_lit = line.split() # print(goods_list) goods_dic['name'] = goods_lit[0] goods_dic['price'] = goods_lit[1] goods_dic['数量'] = goods_lit[2] goods_list.append(goods_dic)print(goods_list)f.close()f = open('shoplist', encoding='utf-8')good_list=[]for line in f: # if line.strip(): #只显示文件中有内容的行 # print(line.strip()) line = line.strip() goods_list = line.split() print(goods_list)f.close()
文件的修改
1.创建一个新文件 2.把原来的文件中的内容读出来 3.操作读出来的字符串,把字符串中的内容替换掉 4.把替换之后的内容写到新文件里 5.删除原文件,新文件重命名成原文件的名字 删除原文件需要以下操作: import os #os模块 os.remove('原文件') #删除文件 os.rename('原文件.bak','原文件') #把新文件重命名为原文件的名字
具体步骤如下:f1 = open('原文件.bak','w',encoding='utf-8')f = open('原文件',encoding='utf-8')old_content = f.read() #原来的内容\nnew_content = old_content.replace('新','原来')f1.write(new_content)f.close()f1.close()import osos.remove('原文件')os.rename('原文件.bak','原文件')
当文件特别大时上面方法就不适用了
当文件特别大时,只改第一个要修改的内容
with操作
with open('原文件',encoding='utf-8') as f: content = f.read() print(content)with open('原文件',encoding='utf-8') as f: content = f.read() 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','原文件')