文件操作
一:文件操作
01):文件读取:(r 只读)
001):我们先在当前文件夹内创建txt文件取名为123,在其中添加几句话内容。
f 称之为文件句柄,控制着 123 这个文本文档 f=open("123",mode="r",encoding="utf-8") print(f.read()) -->读取文本的全部内容 content=f.read(4) #读取文本中的前4个数据 print(content) content=f.readline() #读取第一行数据 content=f.readlines() #读取全部内容,返回的结果是列表。而且是有换行符 \n 打印例子:['哎呦喂,客官今天吃点啥嘞\n', '来个烤猪蹄吧\n', '烤猪蹄卖完'] 可以用 strip()去掉空格和换行符
002:)无限循环案例:
f=open("123",mode="r",encoding="utf-8") while 1: #while 1 会执行无限循环,当起循环完文件中内容后,就不段循环换行符,所以后面出现很多空白 count=f.readline() print(count)
003):绝对路径和相对路径的问题
1. 绝对路径(当文件路径是固定的时候)
从磁盘根目录找文件。 windows下用的就是c,d,e,f, linux: \user\bin\xxxx
比如 :D:\BaiduNetdiskDownload\旺财的粮食\第一天的吃的食物.txt
2. 相对路径(用的多)
相对路径相对于当前程序所在的文件夹 ../ 表示上一层文件夹 \n \t 转义字符。 有固定的含义的。 推荐用r rD:\BaiduNetdiskDownload\旺财的粮食\第一天的吃的食物.txt
004):文件句柄:f
文件句柄是可以迭代的,例如: f=open("123",mode="r",encoding="utf-8") for i in f: #读取文中的文内容,一行一行的读取。每读取一次将值交给前面的变量i print(i) 打印结果是有换行和空格的,但是可以用.strip 去掉换行和空格
02):文件写入(只写w)
!!!!!重点重点重点!!!!!!会清空全文件的内容
001):w 写步骤 : 先清空原文件的所有内容,再写入
f=open("456",mode="w",encoding="utf-8") f.write("哎呦,打尖还是住店呀!") f.close() #从文件中可以看到,多了一个名为 456 的文本文件, 而且文本文中还是有内容的! #f.write("6789\n") \n 将写入的内容增加在下一行
002):文本文件的复制
f1=open(r"000",mode="r",encoding="utf-8") #r 是为了去掉换行 f2=open(r"123",mode="w",encoding="utf-8") #w会将123 里面的内容先清空 再执行后面的语句 for i in f1: f2.write(i) #将f1 文件里面的内容一行一行迭代,每迭代一次就将内容复制给f2 print(f1,f2) # 执行这条操作后,两个文件的内容会完全一样 #在执行上面操作时候,发现f1 和f2 的内容一模一样了。
03):b(bytes)
(b 读取是字节,用来操作非文本文字,像视频,图片等)
有 rb(读取非文本的内容) wb(写非文本的内容) ab (增加非文本内容) 实际操练:将d盘的图片 复制到f盘 操作代码: #将D盘的 哈哈哈.jpg 图片复制到f盘中 f1=open(r"D:\哈哈哈.jpg",mode="rb") f2=open(r"E:\哈哈哈.jpg",mode="wb") for i in f1: #分批量的读取数据 f2.write(i) # open()出来的结果可以使用read或者write. 根据mode来看 #将循环出来的内容i 复制给f2 f1.close() f2.close()
04):读写操作( r+ ) + 是代表是扩展的意思(其他:w+ 写读操作,a+ 追加写读操作)
例子:
001):r+()读写操作 #读写操作要先 读取,在写入内容(写入的内容会在文本最末端)
正确例子: f=open("999",mode="r+",encoding="utf-8") f1=f.read() #必须是先读取,再写入,不然会覆盖原本文档里面的内容 f.write("哎呦喂") print(f1) #结果是 我们在读取后,只会显示999这个文件的里面的内容,后面增加的内容没有被打印出来!
错误例子: f=open("999",mode="r+",encoding="utf-8") f.write("哎呦喂") content=f.read() print(content) #执行程序后 原文件999 的文件里面的前几个数据被“哎呦喂” 给覆盖了 所以必须要先读取,再写入才行! r+不论你怎么读取,先读后再写入,增加的内容都是在文本的最末位 f=open("999",mode="r+",encoding="utf-8") count=f.read() f.write("zhnedea") print(count) #可以到999的文本文件,读取答应出来的是文本的原来的内容,但是去999的文件看下,可以看到文本文件 最后面增加了我们写入的文件 "zhendea"
002):w+ 写读 (一定要记住 w 会先清空原来内容然后再写入,牢记呀)
f=open("999",mode="w+",encoding="utf-8") f.write("这个是增加的内容") count=f.read() print(count) #去999文本文件看,原文件被清空了,只有新增加的内容! f.close()
003):a+(追加读写)
不论光标在何处,写入的时候都是在末尾。(按键盘上上 insert 光标就出来了 ) f=open("999",mode="a+",encoding="utf-8") f.write("hahahah") f.write("hhdjfhadhfidanf") count=f.read() print(count) #解释:不论光标在何处,写入的时候都在末尾,(末尾指的是:光标在原内容的最后面,不是在增加后的内容的最后面)
05):修改⽂件以及另⼀种打开⽂件的⽅式
⽂件修改: 只能将⽂件中的内容读取到内存中, 将信息修改完毕, 然后将源⽂件删除, 将新
⽂件的名字改成老⽂件的名字
# ⽂件修改import os with open("⼩娃娃", mode="r", encoding="utf-8") as f1,\ open("⼩娃娃_new", mode="w", encoding="UTF-8") as f2: content = f1.read() new_content = content.replace("冰糖葫芦", "⼤⽩梨") f2.write(new_content) os.remove("⼩娃娃") # 删除源⽂件 os.rename("⼩娃娃_new", "⼩娃娃") # 重命名新⽂
弊端: ⼀次将所有内容进⾏读取. 内存溢出. 解决⽅案: ⼀⾏⼀⾏的读取和操作
1 import os 2 with open("⼩娃娃", mode="r", encoding="utf-8") as f1,\ 3 open("⼩娃娃_new", mode="w", encoding="UTF-8") as f2: 4 for line in f1: 5 new_line = line.replace("⼤⽩梨", "冰糖葫芦") 6 f2.write(new_line) 7 os.remove("⼩娃娃") # 删除源⽂件 8 os.rename("⼩娃娃_new", "⼩娃娃") # 重命名新⽂件