文件操作
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
文件:file
夜空中最亮的星 能否知道
曾与我同行的身影 如今在哪里
夜空中最亮的星 能否在意
是等太阳升起 还是意外先来临
我宁愿所有痛苦都留在心里
也不愿忘记你的眼睛
给我再去相信的勇气
越过谎言去拥抱你
每当我找不到存在的意义
每当我迷失在黑夜里
黑夜中最亮的星 请照亮我前行
我祈祷拥有一颗透明的心灵
和会流泪的眼睛
给我再去相信的勇气
越过谎言去拥抱你
每当我找不到存在的意义
每当我迷失在黑夜里
黑夜中最亮的星 请照亮我前行
夜空中最亮的星 能否听清
那仰望的人 心底的孤独和叹息
操作示例;
data = open("night_sky",encoding="utf-8").read() #打开文件 默认是gbk,需要用utf8 print(data) #打开的文件对象赋一个变量 # r读模式 f = open("night_sky",'r',encoding='utf-8') #赋给f一个内存对象,一个句柄 文件名大小内存地址 data1 = f.read() data2 = f.read() print(data1) #读完所有的行 光标在最后面 print('--data2--') #data2没有打印数据 f.close() #写write 不能读 覆盖原来的文件 f = open("night_sky",'w',encoding='utf-8') f.write("夜空中的星 \n") f.write("上海 \n") f.close() #追加 append 不能读 不覆盖原来的文件 f = open("night_sky",'a',encoding='utf-8') f.write("夜空中的星 \n") f.write("上海 \n") f.close() f = open("night_sky",'r',encoding="utf-8") #打印文件前五行 for i in range(5): #循环五次 print(f.readline()) #一行一行的读 #打印整个文件 #f.readlines() 只适合读小文件 print(f.readlines()) #f.readlines 是一个列表 for line in f.readlines(): print(line.strip()) #第十行不打印 for index,line in enumerate(f.readlines()): if index == 9: print("--分割线--") continue print(line.strip()) #strip去掉空格和换行 #循环一行删除一行 内存中只保存一条数据 count = 0 #加一个计数器可以实现不打印指定的行 for line in f: #f变成了一个迭代器 if count == 9: print("--分割线--") count += 1 continue print(line) count += 1 f.close() f = open("night_sky",'r',encoding="utf-8") print(f.tell()) #打印光标当前位置 0 print(f.readline().strip()) print(f.tell()) #字符的位置 f.seek(10) #回到指定地方 print(f.tell()) print(f.encoding) #当前字符集 print(f.fileno()) #返回一个编号 print(f.readable()) #判断文件是否可读 print(f.writable()) #判断文件是否可写 f.close() #print(f.flush()) 缓存写到硬盘里 f = open("night_sky01",'w',encoding="utf-8") f.write("hello world") f.flush() #刷新到硬盘中 f.close() f = open("night_sky01",'a',encoding="utf-8") f.truncate() #清空文件 f.truncate(10) #从开始截取10个 #f.flush()程序练习 进度条模拟 import sys,time for i in range(50): sys.stdout.write("#") sys.stdout.flush() #刷新 time.sleep(0.1) #写入一次暂停0.1s #r+ 读写 以读和追加的模式 f = open("night_sky",'r+',encoding="utf-8") print(f.readline()) print(f.readline()) f.write("-->python") #写的文件追加到最后面的行了 print(f.readline()) f.close() #w+ 写读 f = open("night_sky",'w+',encoding="utf-8") #创建一个文件 f.write("-->hello") print(f.readline()) f.seek() f.write("-->python") #还是追加到后面 print(f.readline()) f.close() #rb 二进制文件读 f = open("night_sky",'rb') #二进制不需要声明字符编码 print(f.readline()) #网络传输用二进制 f.close() #wb 二进制文件写 f = open("night_sky",'wb') f.write("hello \n".encode()) #需要编码为二进制 f.close() #文件修改 #方法一全部加载到内存中进行修改,像vim #打开一个文件修改后,写入一个新文件 f = open("night_sky",'r',encoding="utf-8") f_new = open("night_sky_new",'w',encoding="utf-8") for line in f: if "夜空中最亮的星" in line: line = line.replace("夜空中最亮的星","The brightest star in the night sky ") f_new.write(line) f.close() f_new.close() #传递参数修改文件 f = open("night_sky",'r',encoding="utf-8") f_new = open("night_sky_new",'w',encoding="utf-8") find_str = input("输入修改的内容:") rep_str = input("输入替换成的内容:") for line in f: if find_str in line: line = line.replace(find_str,rep_str) f_new.write(line) f.close() f_new.close()
with语句
1 为了避免打开文件后忘记关闭,可以通过管理上下文
2 当with执行完毕后,会自动关闭并释放文件资源
with open("night_sky",'r',encoding="utf-8") as f: print(f.readline()) #循环 for line in f: print(line.strip()) #可以同时打开多个文件 with open("file1") as object1,open("file2") as object2: pass #官方建议一行代码不超过80个字符 with open("file1") as object1,\ open("file2") as object2: pass