Python 学习的第六天
写此博客 是为了激励自己,并且将自己的心得以及遇到的问题与人分享
一、课堂笔记
1.一切皆文件 对文件的操作一般都三个过程:打开、操作、关闭。
f = open (‘小文件‘,‘r‘,encoding = ‘utf8‘) # r 为读模式 w 为写模式 整体为得到文件的操作句柄 data = f.read() print(data) f.close()
打开文件,得到文件的操作句柄
通过文件操作句柄对文件进行操作
关闭文件
2.read方法
read(5) 取出来的是5个字符,在Python3 中中文算是一个字符,英文为一个字母一个字符。
3.write方法
f = open (‘小文件‘,‘w‘,encoding = ‘utf8‘) # r 为读模式 w 为写模式 a 为追加模式 # w 的时候会清空文档内容再写 a的时候会直接追加 f.write(‘helloworld‘) f.close()
## 执行效果:以前文件中的内容都不见了,只有一个‘helloworld‘
4.close方法
只要打开一个文件,就要关闭它。
5.模式
r 模式 只可读
w 模式 只可写 使用w模式打开后,先将文件进行初始化,文件为空了就。
a 模式 追加模式
w+ 打开文件并读写 1. 文件存在,则清空(也即写入空); 2. 文件不存在,则创建文件 ; 3. 文件流定位到开始位置, 所以read() 会得到空。
r+ 打开文件并读写 1. 文件存在,打开文件,文件指针定位到文件开始位置; 2. 文件不存在, 则报错文件不存在。
a+ 打开文件并读添 1. 文件存在,打开文件,文件指针定位到文件开始位置,但不清空;2. 文件不存在,创建文件; 3. 打开后读取时,在文件开头位置,4. 写入时,添加到文章末尾,并且指针位于添加后的末尾,所以再次读取会乱码。
6.readline() 只读一行 readlines() 读取全部放在一行中
在文件中取出某一行,对其操作。
#author:"LFD" #date: 2018/2/13 data = open(‘lfd‘,‘r‘,encoding=‘utf8‘) #文件的操作句柄(对象),只有拿到它之后才能进行操作。 num = 0 for i in data.readlines(): num += 1 if num == 6: i = ‘‘.join((i.strip(),‘ssss‘)) # 通过number自己定义的一个变量来对文件的某一行进行操作 print(i.strip()) data.close()
另一种取出文件内容的方法 跟迭代器有关 最好用如下这种方式
#author:"LFD" #date: 2018/2/13 data = open(‘lfd‘,‘r‘,encoding=‘utf8‘) #文件的操作句柄(对象),只有拿到它之后才能进行操作。 for i in data: #这是for 内部将 data对象做成了一个迭代器,用一个取一个,对于文本来说,用一个取一行。data本神并不是一个迭代器 print(i.strip()) data.close()
7.文件操作一系列的方法:
readline() 取出文件的一行 ;
readlines() 取出文件的多行,得到的是一个列表,把每一个readline做成一个字符串放到列表中去了。
上面虽然可以取出来,但会有多余的 \n 换行符,使用 .strip() 方法来去掉多余的 \n
字符串拼接最好不要用 + ,用 join() 方法会更好一些。
tell() 打印光标位置 英文字符占一个 中文字符占3个
seek() 调整光标的位置 data.seek(0)----这么用
flush() 把缓存中的数据保存到磁盘上去,可以用来做进度条
import sys,time for i in range(30): sys.stdout.write("*") sys.stdout.flush() # 不会进入缓冲区,刚进入缓冲区存入硬盘 time.sleep(0.2)
truncate(5) 截断,从第五个光标位置处,后面的内容全部截断删除掉了。文件打开方式要使用 ‘ a ‘ 模式。使用 ‘ w ‘模式打开文件再使用该方法没有什么意义。
8.终极问题 对文本进行修改
#author:"LFD" #date: 2018/2/13 f_read = open(‘lfd‘,‘r‘,encoding=‘utf8‘) f_write = open(‘lfd3‘,‘w‘,encoding=‘utf8‘) number = 0 for line in f_read: number += 1 if number == 5: line = ‘‘.join([line,‘xxx\n‘]) #这个是对文件某行末尾进行追加 # line = ‘hello world‘ 这个是 对文件某行内容覆盖书写 f_write.write(line) f_read.close()
9.将字典型数据转换成字符型存入文件中,再使用eval() 方法将字符型数据转回字典型数据。
a = str({‘beijing‘:{1:111}}) print(type(a)) print(a) a = eval(a) # 将字符串类型的‘a‘转换成字典型的 ‘a‘ print(type(a)) print(a[‘beijing‘])
10.with 语句 with() 方法
以后打开文件尽量采用 with 方法来打开
f = open(‘lfd‘,‘r‘) #必须要手动关闭文件 f.readline() f.read() f.close() with open(‘lfd‘,‘r‘) as f: # 退出了with代码块会自动将文件关闭 f.readline() f.read() print(‘hello world‘)
with 还支持同时对多个文件的上下文进行管理
同时管理多个文件对象创建
with open(‘lfd‘,‘r‘) as f_read, open(‘lfd2‘,‘w‘) as f_write: for line in f_read: f_write.write(line)
二、心得
在过年期间到现在,经历了很多事情,包括是否还要从事这个专业,是否要继续学习下去。中间间隔了这么久,也认认真真的去思考了很多很多东西。最后,还是回来了。在我心里,做一事就要像一事,连这点小事都做不好,干什么都成不了。
这章的学习可谓是辛苦的不行,本来2-3天的内容硬是看了足足半个月,虽然中间夹杂着过年。回到了学校,步入了正轨,但对Python的学习还是不会落下。