一、初始文件处理(写文件)
""" 第一步: 找到文件 第二步:打开文件 第三步:操作:先读后写 第四步:关闭 """ f = open("学习","w",encoding="utf-8") #f是文件操作符 文件句柄 文件操作对象 # f2 = open("学习2","w",encoding="utf-8") # f2.close() # open打开文件是依赖操作系统提供的途径 # 操作系统有自己的编码,open在打开文件的时候默认使用的是操作系统的编码 # eg:win10之前用的GBK mac、Linux使用的是utf-8 f.write("hello,world ") #" "是Python语法的换行符 f.write("123456") f.write("00090900") #如果在写文件的时候我们需要写数字也必须把数值转换成字符串 f.write(" assfffghghgdfgf") #" "换行符放前边也可以 f.write(" 你好,世界") #凡是涉及到储存读写,字符集用utf-8 f.write(" 天气不错") # print(f.writable()) #判断文件是否可写 # print(f.readable()) #判断文件是否可读 f.close() # 找到文件详解: # 文件与Py的执行文件如果是在相同路径下,直接用文件的名字就可以打开 # 文件与Py的执行文件如果是不在相同路径下,用绝对路径找到文件,文件的路径需要用取消转译的方式来表示: # 方法一(\):'C:\Users\Administrator\Desktop\s1_tmp.txt' # 方法二(r''):r'C:UsersAdministratorDesktops1_tmp.txt' # f = open(r'C:UsersAdministratorDesktops1_tmp.txt','w',encoding='utf-8') # f.write("哈哈哈哈") # f.close() # 关闭文件详解: # 操作系统级别的关闭文件资源:f.close() 必须写 # del f 主动释放一个Python程序内存中的变量 可用可不用
二、初始文件处理(读文件)
#第一步:打开文件 # 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(11)) #3.读文件的第三种方式: f.readline() 是按照行读,每次执行就会往下读一行 #.strip() 是去掉空格、制表符、换行符 # content = f.readline() # print(content) # print("readline:",content.strip()) # content2 = f.readline() # print(content2.strip()) # content3 = f.readline() # print(content3.strip()) #4.读文件的第四种方式: .readlines() ,返回的是列表, 将文件中的每一行作为列表中的每一项返回一个列表 # content = f.readlines() # print("readlines:",content) #第二步:读取文件: 5、读:这是最常用的方法 for l in f: print(l.strip()) # 第三步:关闭文件 f.close()
三、.strip()
''' f = open('shoplist',encoding='utf-8') i = [] for l in f: if l.strip(): line = l.strip() goods_lst = line.split() goods_dict = {"name": None, "价格": None} goods_dict['name']=goods_lst[0] goods_dict['价格']=goods_lst[1] i.append(goods_dict) print(i) f.close() ''' ''' #去除多层空格、制表符、换行符 for i in f: if i.strip(): #如果成立代表有内容 只显示有内容的行 print(i.strip()) '''
四、打开文件的几种模式
#b: 图片、音乐、视频等任何文件 # 传输:上传、下载 # 网络编程 ''' f = open('学习','rb') content = f.read() print(content) f.close() ''' #追加可读 极少用 # f = open('shoplist','a+',encoding='utf-8') # # # f.write(" computer 6000 5") # # f.write(" coke 120 5") # # f.write(" perpie 333 5") # print(f.readable()) # f.close() #r+ 可读可写 # 1.先读后写 写是追写 # 2.先写后读 从头开始写 (会从头开始覆盖) # f = open('学习','r+',encoding="utf-8") # # line = f.readline() # # print(line) # f.write(" 0000000000000000000000000000") # f.close() #w+ 可写可读 :一上来文件就清空 , # 1、尽管可读,但是读出来的内容是新写入的内容 # 2、 他的光标是在最后的 需要主动移动他的光标才可读 # f = open('学习','w+',encoding="utf-8") # f.write(" ABC ") # f.write("哈哈哈") # # f.seek(0) # seek() 是指针 就是光标的位置 # print(f.read()) # f.close() #a+ 追加可读 # f = open('学习','a+',encoding="utf-8") # f.write(" 娃哈哈") # f.seek(0) # print(f.read()) # 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()
五、文件内的光标移动(.seek() .tell())
f = open('学习','r+',encoding='utf-8') # seek 光标移动到第几个字节的位置 # f.seek(0) #移动到最开始 # f.seek(0,2) #这个是移动到最末尾 # f.truncate(5) #从文件开始的位置只保留指定字节的内容 f.write("中华人民共和国合同法规定") # content = f.readline() # print(content.strip()) # print(f.tell()) #tell() 告诉我们当前光标所在位置 # print(f.seek(4)) #光标移动到三个字节的地方 content = f.read(1) #读一个字符 print('***',content,'***') content = f.readline() print(content.strip()) print(f.tell()) f.close()
六、修改文件
''' #文件的修改 #1.创建一个新文件 f2 = open('原文件.bak','w',encoding='utf-8') #2.把原来的文件中的内容读出来 f = open('原文件',encoding='utf-8') old_content = f.read() #原来的内容 #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("老内容","新内容") ''' ''' # 创建新文件 f2 = open('原文件.bak','w',encoding='utf-8') f = open('原文件',encoding='utf-8') for i in f: new_content = i.replace('原来','新') f2.write(new_content) 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 操作文件 最常用方法之一 # with open('原文件',encoding='utf-8') as f: # # content = f.read() # # print(content) # for line in f: # if line.strip(): # 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','原文件') ''' with open('原文件',encoding='utf-8') as f,open('原文件.bak','w',encoding='utf-8') as f1: for i in f: new_content = i.replace('新','原来') f1.write(new_content) import os os.remove('原文件') os.rename('原文件.bak','原文件') ''' #修改文件 #read() #for循环的形式逐行修改 #只修改一行的内容,其他不变 —— 扩展例子 #with语句 == 文件的打开和关闭 #根据个人喜好