pyhon学习<文件操作>

我们要操作一个文件,一般分为以下步骤:

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(

 打印所有文件内容,下面这种方式打印出来的结果为列表形式

print(f.readlines()

 打印所有文件,以原文件格式显示

for line in f.readlines():
    # print(line)
#打印出来结果中间有一些空行,是因为我们每一个元素后面默认有一个\n,因此将它打印出来,直接换行。
#不想换行的话:
    #print(line.strip())#strip把空格和换行去掉

f.readlines()#只适合读小文件,大文件内存放不下。卡死。循环时,打印完一行,就不需要它了,为什么还要将它存在内存中,没有必要,怎么办呢?可不可以变成循环一行,删掉一行即内存中只保存一行,即便是很大的文件用这种办法处理也是没问题的,占空间小。

高级办法

 

for line in f:#这种办法其实是一行一行读,并且内存中只保存一行,效率最高
    print(line.strip())

为什么这种办法能实现内存中只保存一行,这是因为这个文件f已经被变成了迭代器(牛逼),已经不是列表了,因此没有办法通过枚举的方式将其下标取出来,需要写计数器 :

 

count = 0
for line in f:
    count +=1
    print(count,line.strip())

未完。。。

posted @ 2018-12-22 15:29  上古战神  阅读(205)  评论(0编辑  收藏  举报