上一篇文章,我们介绍了Python中程序的三种条件语句,对于顺序结构和选择结构,比较容易理解和使用。而对于程序开发而言,程序的一个好处就是能很快的处理重复性的无聊的工作,在实际的编程开发中我们也会经常编写循环结构的程序代码。今天我们利用循环结构的for语句对做一个实例的简单的练习,加强下对循环结构的了解。
实例需求
文件的读写是程序中比较常遇到的,今天我们利用for语句读取指定文件的内容显示出来,在这个的基础上在讲读取的内容写入到一个新文件中(也就是我们常说的备份)。
利用知识点:
循环语句(for)
文件内容的读取(open(),readlines())
文件的写入(write())
open()函数从帮助可以看出open()是Python的内置函数,用于文件的读写操作,主要形参有:file(文件),mode(读写模式),buffering(读写缓存),encoding(读写编码)等,这里主要说下mode几种取值的意义:
r 只能读
r+ 可读可写 不会创建不存在的文件 从顶部开始写 会覆盖之前此位置的内容
w+ 可读可写 如果文件存在 则覆盖整个文件不存在则创建
w 只能写 覆盖整个文件 不存在则创建
a 只能写 从文件底部添加内容 不存在则创建
a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建
还有encoding的编码问题,
python3在readlines()里,缺省会使用操作系统当前的编码来解析文件,比如windows下就用GBK,在linux下则根据当前language来设置解析办法。解决的办法是在open()里加上参数encoding的编码方式。
而readlines()返回的是一个list,里面一个元素对于文件的一行的内容,从文件第1行开始对应第0位元素,一直到最后一行的内容。
Python的open()帮助文档
编码测试
我们就以读取同目录下昨天写的的test_if.py文件为例,读取它的内容,根据截图我们可以看出它的内容一共有40行
用于读取的内容test_if.py
test_if.py的内容
读取test_if.py代码及运行结果
如上面所说,如果我们不加encoding="utf-8"的这个参数在Python3.X中会出现以下问题
Python3.X中open()不加encoding参数运行错误
通过for循环和open()函数我们已经将文件中的内容读取出来了,然后将一行行读取的内容以追加的形式写入到一个新的文件,这就用到了open()函数的另一个模式a+(a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建)和write()函数
将test_if.py读取内容写入到新的文件test_if_copy.txt中
程序执行完成,文件读写完成
我们发现程序执行过程中没有任何的提示,如果我们想看当前拷贝的进度到哪一行了,可利用enumerate(list集合),去获取当前循环的进度,将程序进行改造如下:
加入读写进度的文件操作
ok又是凌晨2点啦,利用for循环文件的读写操作完成了,有什么问题大家可以下方评论留言哦,大家一起交流进步哈,,希望对你们有所帮助,永不止步...