文件操作的函数
open(文件名(路径),mode=?(模式),enconding='字符集')
# 文件路径: # 1. 绝对路径,从磁盘的根目录寻找 或者 从互联网上寻找一个路径 # 2. 相对路径(用的多). 相对于当前程序所在的文件夹 ../上一层文件夹 # f = open("哈哈哈哈哈", mode="r", encoding="UTF-8") # s = f.read() # print(s) # f.close() # 如果没有这句话, 你在下面的程序中如果删除这个文件. 就会报错 # f = open("e:/abc/里皮.txt", mode="r", encoding="gbk") # s = f.read() # print(s) # f.close()
# f = open("呵呵呵", mode="r", encoding="utf-8") # # while 1: # # s = f.readline().strip() # 一次读一行 # # if s!= "": # # print("内容是",s) # # for line in f: # 文件是一个可迭代对象 # # print(line.strip()) # 一行一行的处理数据 # lst = f.readlines() # print(lst) # f.close()
模式
模式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b # 带w的. 只要你操作了. 就会清空源文件 # 如果文件不存在. 会自动创建文件 # f = open("阿西吧", mode="w", encoding="utf-8") # f.write("呀! 养狗了没有? ") # f.write("养狗四米大") # f.flush() # f.close() # a模式 # 写的时候. 换行需要手动控制 # f = open("阿西吧", mode="a", encoding="utf-8") # f.write("四米大?") # f.write("四米大") # f.flush() # f.close() # rb, wb, ab, bytes如果处理的是非文本文件, mode里如果有b. encoding就不能给了 # f = open("c:/pdd.jpg", mode="rb") # 这里不能写encoding # e = open("e:/pdd.jpg", mode="wb") # for line in f: # 从c盘读取 line你是不知道读取了多少数据的 # e.write(line) # 写入到e盘 # f.close() # e.flush() # e.close()
# 不论你读取了多少内容.光标在哪儿,写入的时候都是在结尾写入, 除非上来就写入, 这时写入是在开头 # 最好用的读写同时存在的模式 # r+ 读写模式. 先读后写 # w+ 写读模式. 先写后读 # f = open("阿西吧", mode="r+", encoding="utf-8") # s = f.read(3) # 读取三个字符 # print(s) # f.write("不养了. 送人") # 在末尾写 # f.write("葫芦娃") # s = f.read() # print(s) # s = f.read(2) # print(s) # f.write("还有何云伟") # f.close() # 很少用. 因为会清空文件中的内容 # f = open("阿西吧", mode="w+", encoding="utf-8") # f.write("张云雷也要退出德云社") # 写完之后光标在最后. 读取是没有内容的 # f.seek(0) # 移动光标, 移动到开头 # s = f.read() # print("读取的内容是",s) # f.flush() # f.close() # a+ f = open("阿西吧", mode="a+", encoding="utf-8") f.write("我要加入德云社") f.seek(0) s = f.read() print(s) f.flush() f.close()
常用的操作
# f = open("阿西吧", mode="r", encoding="utf-8") # for line in f: # print(line.strip()) # # f.seek(0) # 移动到开头 # # for line in f: # print(line.strip()) # # f.close() # f = open("阿西吧", mode="r", encoding="utf-8") # f.seek(3) # 3byte => 1中文 # s = f.read(1) # 读取一个字符 # print(f.tell()) # 光标在哪儿??? # f.close() # seek(偏移量, 位置) # seek(0) # 开头 # seek(0,2) # 在末尾的偏移量是0 末尾 f = open("啊同类个同同同", mode="w", encoding="utf-8") f.write("哇哈哈哈哈压缩盖伦") f.seek(9) print(f.tell()) # 从文件开头截断到光标位置 # 如果给参数. 从头截断到参数位置 f.truncate(12) f.close()
文件的修改
1.引入os模块
2.打开目标文件 r
3.打开文件副本
4.读取目标文件,进行修改,写入副本
5.删除目标文件
6.重命名文件副本
# 引入模块 import os import time # 打开目标文件 # f1 = open("alex昨天干嘛去了", mode="r", encoding="utf-8") with open("alex昨天又干嘛去了", mode="r", encoding="utf-8") as f1, open("alex昨天又干嘛去了_副本", mode="w", encoding="utf-8") as f2: for line in f1: line = line.replace("alex", "sb") f2.write(line) time.sleep(3) # 删除文件 os.remove("alex昨天又干嘛去了") time.sleep(3) os.rename("alex昨天又干嘛去了_副本","alex昨天又干嘛去了")
文件相关操作
#处理日志文件 with open("2018-08-06.log", mode="r", encoding="utf-8") as f: first = f.readline().strip().split(",") for line in f: dic = {} # 每一行一个字典 # 1,alex,10086,特斯拉 ls = line.strip().split(",") for i in range(len(first)): dic[first[i]] = ls[i] lst.append(dic) print(lst)