文件操作
打开文件
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')) #返回值表示占有的字符数,如果带有
,需要再加1个字节
f.write('asdff')
f.write('isfgs
') #
文件的换行
f.write('
dljf') #
在后面,表示本次写入完成后,下一次再写入的内容会换行,
在前面,表示本次写入的内容会在下一行显示
文件处理的步骤:
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:UsersAdministratorDesktopa.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
', '123
', 'hello
', 'das'] <class 'list'>
5.读:最常用
for i in f
b:图片,音乐,视频等任何文件,用于传输:上传和下载,在网络编程中会详细讲解
f = open('歌词','rb')
content = f.read()
print(content)
f.close()
一般情况下:文件操作,要么读,要么写,很少会用到读写、写读同时用的
常用的:r , w , a
rb ,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
')
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() #原来的内容 new_content = old_content.replace('新','原来') f1.write(new_content) f.close() f1.close() import os os.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 os
os.remove('原文件')
os.rename('原文件.bak','原文件')