我们要操作一个文件,一般分为以下步骤:
1. 找到文件
2. 打开文件
3. 操作文件
4. 关闭文件
打开的文件内存对象赋一个变量,后续通过变量找到这个文件内存对象,再去操作文件。
f = open("Dream",'r',encoding="utf-8")
赋给f的是一个内存对象,又把它称为文件句柄===其实就是这个文件的内存对象。
这句话的意思是:我们打开Dream文件,之所以加encoding =”utf-8”是因为在windows操作系统下默认文件的打开方式是gbk,而python默认的编码格式为utf-8,这样写的话即就是告诉程序打开文件的方式为utf-8。
data = f.read()
可以理解为对这个文件进行读操作,将读出来的内容赋给变量data
data2 = f.read()
print(data)
开始读的时候可以理解为指针停留在文件段落的第一行,读完之后指针停留在最后
print(data2)
再次读的时候指针会继续往下走,文件下面什么都没有,因此什么都读不到,后续会学习如何将指针移回来,重新读。
f = open("Dream",'w',encoding="utf-8")
这种写的方式意思是创建一个文件,如果文件原来有东西,会将原来的东西清空。格式:文件名.如果没有这个文件名,会创建此文件,w写模式,encoding="utf-8"打开文件的编码格式
f = open("Dream2",'w',encoding="utf-8")
创建一个文件,文件名为Dream2。
f.write("DREAM")
给文件Dream2中写DREAM。如果后续想操作这个文件的话,建议将其赋给一个变量即
data = f.write("DREAM")
f.write(" I LOVE YOU")
这样继续写会和上面写的DREAM写到一行。想换行的话在上面DREAM后面加换行符即可:
如果即想写,又想读。
f = open("DREAM",'a',encoding="utf-8")#append追加
不全部读取,写一次读一行,显然这是愚蠢的办法
f = open("yong man","r",encoding="utf-8")print(f.readline()print(f.readline(
打印所有文件内容,下面这种方式打印出来的结果为列表形式
打印所有文件,以原文件格式显示
for line in f.readlines(): # print(line)#打印出来结果中间有一些空行,是因为我们每一个元素后面默认有一个\n,因此将它打印出来,直接换行。#不想换行的话: #print(line.strip())#strip把空格和换行去掉
f.readlines()#只适合读小文件,大文件内存放不下。卡死。循环时,打印完一行,就不需要它了,为什么还要将它存在内存中,没有必要,怎么办呢?可不可以变成循环一行,删掉一行即内存中只保存一行,即便是很大的文件用这种办法处理也是没问题的,占空间小。
高级办法
for line in f:#这种办法其实是一行一行读,并且内存中只保存一行,效率最高 print(line.strip())
为什么这种办法能实现内存中只保存一行,这是因为这个文件f已经被变成了迭代器(牛逼),已经不是列表了,因此没有办法通过枚举的方式将其下标取出来,需要写计数器 :
count = 0for line in f: count +=1 print(count,line.strip())
未完。。。