#!/usr/bin/env python3 # -*- coding: utf-8 -*- 1、r读模式 # rb模式操作的文件是非文字类的文件:图片,视频,音频等等。 # read() read(n) readline() readlines() for循环 f1 = open('./zwc.txt', encoding='utf-8', mode='r') content = f1.read() print(content) f1.close() # r模式下五种读取方式: read() 全部读取出来 read(n) 读n个字符 在r 模式下按照字符读取 在rb 模式下按照字节读取 readline() 按行读取 readlines() 返回一个列表,列表中的每个元素是原文件的每行的数据。 for循环 f1 = open('./zwc.txt', encoding='utf-8', mode='r') for line in f1: print(line.strip()) f1.close() 2、r+读写模式 # 先读后写(后追加) # 在r+读写模式下,应该先读后写入。 f1 = open('./zwc.txt', encoding='utf-8', mode='r+') content = f1.read() print(content) f1.write('zhouwanchun') f1.close() 如果我就要先写后读呢? 光标,指针 f1 = open('./zwc.txt', encoding='utf-8', mode='r+') f1.seek(0,2) # 把光标调整到最后 f1.write('zhouwanchun') f1.seek(0) # 把光标调整到最开始 content = f1.read() print(content) f1.close() 3、写模式:w、wb、w+、w+b # 没有文件创建文件写入,有文件清空原文件内容写入新内容。 # w模式必须是以字符串的内容写入。 f1 = open('./zwc.txt', encoding='utf-8', mode='w') f1.write('mysql3306') f1.close() w+ :写读模式 f1 = open('./zwc.txt', encoding='utf-8', mode='w+') f1.write('mysql3307') f1.seek(0) print(f1.read()) f1.close() 4、a追加模式 # 追加模式:a ab a+ a+b # 没有文件创建文件追加内容,有文件在原文件的末尾追加新内容。 f1 = open('./zwc.txt', encoding='utf-8', mode='a') f1.write('mysql3306') f1.close() 5、其他操作方法 f1.fileno() f1.flush() # 强制保存 相当于ctrl + s f1.readable() f1.writeable() # 判断一个文件句柄是否可读,可写。 f1.tell() # 获取光标位置 f1.seek(3) # 调整光标位置 f1.truncate(3) # 只能在可写的模式下 截取原文件。只能从头截取,不能调整光标截取一部分。不能在w模式下使用truncate。 6、另一种打开文件的操作方式 # 自动关闭文件句柄 # 同一语句可操作创建多个文件句柄 with open('./file1', encoding='utf-8', mode='r') as f1, open('./file2', encoding='utf-8', mode='w') as f2: print(f1.read()) f2.write('666') 7、文件的改: # 方法一: # 1.以读的模式打开原文件,产生文件句柄f1 # 2.以写的模式打开新文件,产生文件句柄f2 # 3.读取原文件 将原文件的内容改写成新内容写入新文件。 import os with open('./1.log', encoding='utf-8', mode='r') as f1, open('./1.log.bak', encoding='utf-8', mode='w') as f2: old_content = f1.read() new_content = old_content.replace('mysql3306', 'mysql3307') f2.write(new_content) # 4.删除原文件。 os.remove('./1.log') # 5.将新文件重命名成原文件。 os.rename('./1.log.bak', './1.log') # 升级版 import os with open('./1.log', encoding='utf-8', mode='r') as f1, open('./1.log.bak', encoding='utf-8', mode='w') as f2: for line in f1: new_line = line.replace('mysql3306', 'mysql3307') f2.write(new_line) os.remove('./1.log') os.rename('./1.log.bak', './1.log')