首页 > 代码库 > 文件操作
文件操作
参数
f = open("aa",mode="r",encoding="utf-8")
#定义名 = open("文件名","模式",指定打开字符集方式)
f.name #查看db文件名
f.tell() 显示文件中,当前 光标位置
f.read() 读全部 (read是读字符 其他都是字节),f.read(5)读取5个字符
f.readline() 读一行 读取成列表形式
f.wirte() 写入
f.close() 关闭
f.seek(10) 移动10个字节 #f.seek(0,2)光标移动到最后操作 (对字节操作,utf-8中,汉字代表3个字节
f.encoding 查看字符编码
f.writable() 是否以写模式打开, #True为真 False为假
f.readable() 是否以读模式打开, #True为真 False为假
f.flush() 强制刷新到硬盘 #一般用于打印实时日志,基本不用,会导致硬盘速度变慢
文件读取模式
f = open("aa",mode="r",encoding="utf-8")
#定义名 = open("文件名","模式",指定打开字符集方式)
r #读(指定文件名,需要手动创建文件) 先创建文件aa 读取文件 f = open("aa",mode="r",encoding="utf-8") #默认是r 不加r也行 f.read() #读取文件到内存 print(f.readline(),end="") #end="" 替换\n(可改),效果:结尾不会换行了, 注:print参数结尾默认是\n, print(f.writable()) #是否以写模式打开, #True为真 False为假 print(f.readable()) #是否以读模式打开, #True为真 False为假 f.close() #结束 #读取文件4个字符,\n也算字符 with open("aa","r",encoding="utf-8")as f :print(f.read(4)) w #写(没文件则创建,已有文件则清空并写入文件内容 ) f = open("aa",mode="w",encoding="utf-8") #lyric是操作文件. mode="w" 写入模式 模式可替换. encoding="utf-8" 用utf-8格式打开lyric文件, f.write("wirte one work...\n") #\n 换行 write是写入参数 f.write ("wirte seven eight nine ten\n") f.close() #结束 ------------------------------------------------------------------- rs = ["aa","bb","cc"] f = open("lyric","w") #打开lyric的写功能(lyric文件存在,则清空数据) for i in rs: #i是rs(内存中黑名单的元素) f.write(str(i)+"\n") #f.write 写入数据 str(i)+"\n" 写入i的每个值到lyric中,\n另起一行 f.close() #文件结束 a #追加(没文件则创建,已有文件则追加文件内容) f = open("a1a1",mode="a",encoding="utf-8") #aa是操作文件. mode="w" 写入模式 模式可替换. encoding="utf-8" 用utf-8格式打开lyric文件, f.write("wirte one work...\n") #\n 换行 f.write ("wirte seven eight nine ten\n") f.close() #结束 #"+" 表示可以同时读写某个文件 r+ #先读,后追加 #可以指定长度修改 w+ #先清空+,后追加 a+ #先追加,后读取 #U表示 将\r \n \r\n自动转换成\n (windows中换行是\r\n linux中换行是\n rU #r和U的组合 r+U #r+和U的组合 #b表示 处理二进制文件,对所有文件都能读取 rb 以2进制模式打开文件,不能声明encoding(不能指定字符类型,默认是二进制格式) #with...as... 优点:读取完文件自动关闭 with open("aa","rb")as f : print(f.read().decode("utf-8")) #decode 转成**模式显示 wb 以二进制写入文件,必须写入bytes格式 f = open("111","wb") #111是文件 f.write("guo 1 哈哈".encode("utf-8")) #写入时必须指定写入的编码类型 print(f) f.close() ab 以二进制追加文件,必须写入bytes格式 f = open("111","ab") #111是文件 f.write("guo 1 哈哈\n".encode("utf-8")) #追加时必须指定写入的编码类型 print(f) f.close() rb+ #以二进制形式先读,后追加 #可以指定长度修改 wb+ #以二进制形式先清空+,后追加 ab+ #以二进制形式先追加,后读取
文件两种修改方式
模式1
#读取文件修改后,保存到内存,再覆盖原文件 #弊端占内存,优点省硬盘空间 #文件lyric手动创建,写内容(文件包含aa) f = open("lyric",mode="r",encoding="utf-8") #定义变量f=打开lyric文件,模式:"读",encoding="utf-8"访问文件编码 data = http://www.mamicode.com/f.read() #定义变量data为读取文件内容 data = http://www.mamicode.com/data.replace("aa","bb") #replace文件替换, aa全部替换为bb f.close() #读模式结束 f=open("lyric",mode="w",encoding="utf-8") #定义变量f=打开lyric文件,模式:"写",encoding="utf-8"访问文件编码 f.write(data) #内存文件内容,写入到文件(原文件清空) f.close() #写模式结束 模式2
#f文件每读一行并修改后,写入到f_new文件 #弊端占硬盘空间,优点省内存空间 import os #工具箱 f = open("lyric",mode="r",encoding="utf-8") #定义变量f=打开lyric文件,模式:"读",encoding="utf-8"访问文件编码 f_new= open("lyric_new",mode="w",encoding="utf-8") #定义变量f_new=打开lyric_new文件,模式:"写",encoding="utf-8"访问文件编码 for line in f: if "aa" in line: line = line.replace("aa","bb") #replace文件替换, aa全部替换为bb f_new.write(line) f.close() #读模式结束 f_new.close() #写模式结束 os.remove("lyric") #删除lyric文件 os.rename("lyric_new","lyric") #lyric_new改名为lyric
#读取aa和bb文件操作 读取aa和bb文件 with open("aa","r",encoding="utf-8") as f_aa, open("bb") as f_bb: print(f_aa.read()) print(f_bb.read()) 读取aa文件写入到bb with open("aa","r",encoding="utf-8") as f_aa, open("bb","w",encoding="utf-8") as f_bb: tow_f=f_aa.read() f_bb.write(tow_f) 读取aa文件追加到bb with open("aa","r",encoding="utf-8") as f_aa, open("bb","a",encoding="utf-8") as f_bb: tow_f=f_aa.read() f_bb.write(tow_f)
2个文件转列表,转字典,转成列表中的N个字典
#db文件格式 #aa #bb #cc #读取db文件生成列表 goods =[] for gn in open("goods","rt",encoding="utf-8"): goods.extend(gn.strip().split()) price =[] for en in open("price","rt",encoding="utf-8"): price.extend(en.strip().split()) print(price) #2个列表合并成字典 shop=dict(zip(goods,price)) print(shop) #字典转成列表的子集添加n个字典 test = [] for k, v in shop.items(): test.append({"name": k, "m": v}) print(test)
一个文件转成列表中的N个字典
f2 = open(‘product‘, ‘r‘, encoding=‘utf-8‘) product_data = f2.read() f2.close() v = product_data.split(‘\n‘) print(v) # 将列表转换成字典 lin = [] for i in v: v1 = i.split(‘:‘) print(v1) v1[1] = int(v1[1]) dic = {v1[0]:v1[1]} lin.append(dic) print(lin)
光标问题
cuisor读取光标地址, read读取文件全部内容, seek 把光标移动到某个字节后面 f.seek(10) 代表移动10个字节(utf-8中,汉字代表3个字节) 创建文件lyric,填写内容如下 123456testABCDE my name is guolm python执行命令: >>>f = open("lyric","r",encoding="utf-8") #encoding 指定读取文件类型的格式 >>>print(‘cuisor:‘,f.tell()) #f.tell()显示当前文件内光标位置, cuisor: 0 >>>print(f.read()) #读取f变量中全部内容, 如果是print(f.readline()) 读取一行内容 123456testABCDE my name is guolm >>>print("--------------------------------------") >>>print(‘cuisor:‘,f.tell()) #f.tell()再次执行,28是当前光标所在字符位置 cuisor: 33 >>>print(f.read()) #上次执行read()读取全部,本次读取文件从最后执行,所有没内容 >>>print("--------------------------------------") >>>f.seek(10) #f.seek(10) 代表移动10个字节后面, f.seek(0)移动到开头 (utf-8中,汉字代表3个字节) >>>print("cursor:",f.tell()) #因为上边操作,光标从10字节之后,执行命令 cursor: 10 >>>print(f.read(5)) #读取5字符 注:汉字代表一个字符,每行的结尾(\n)也代表一个字符 ABCDE >>>f.close() #文件结束
文件操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。