一、系列缘由
作为一名运维工程师,也一直有一个学习开发的想法,值此之际,不知道博客的下一期目标在哪里,在这思考和犹豫的间隙想着学习和充实一下自己,学习一下python语言,python随着大数据和人工智能的兴起而日益火爆。边学习边实践的原则学习python,希望自己更上一层楼。我的目标是创建一个自己的网站——太阳站点(sun-site.com),一个自娱自乐的自由空间。
二、学习笔记
1、读写文件
open() 将会返回一个 file 对象,基本语法格式如下:open(filename, mode)
- filename:包含了你要访问的文件名称的字符串值。
- mode:决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读®。
不同模式打开文件的完全列表:
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
2、文件对象的方法
#使用示例
#打开一个文件
f = open("/tmp/foo.txt", “r”)
str = f.read()
print(str)
#关闭打开的文件
f.close()
- f.read()
为了读取一个文件的内容,调用 f.read(size), 这将读取一定数目的数据, 然后作为字符串或字节对象返回。size 是一个可选的数字类型的参数。 当 size 被忽略了或者为负, 那么该文件的所有内容都将被读取并且返回。 - f.readline()
f.readline() 会从文件中读取单独的一行。换行符为 ‘\n’。f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行。 - f.readlines()
f.readlines() 将返回该文件中包含的所有行。如果设置可选参数 sizehint, 则读取指定长度的字节, 并且将这些字节按行分割。 - f.write()
f.write(string) 将 string 写入到文件中, 然后返回写入的字符数。 - f.tell()
f.tell() 返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数。 - f.seek()
如果要改变文件当前的位置, 可以使用 f.seek(offset, from_what) 函数。from_what 的值, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾,例如:
seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符
seek(x,1) : 表示从当前位置往后移动x个字符
seek(-x,2):表示从文件的结尾往前移动x个字符 - f.close()
在文本文件中 (那些打开文件的模式下没有 b 的), 只会相对于文件起始位置进行定位。当你处理完一个文件后, 调用 f.close() 来关闭文件并释放系统的资源,如果尝试再调用该文件,则会抛出异常。
3、pickle 模块
python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
三、实践练习
1、实践代码
(base) [root@s186 python]# cat xpds.py
# -*- coding: UTF-8 -*-
# This is a python program.
import time
'''
这是一段学习python的实践代码,主要目的是加强python文件读写的使用和记忆。
小派读诗的意思是python程序读取诗歌文件内容,也可以更新诗歌清单哦!
'''
while True:
x = int(input("你是想读诗还是写诗?\n1:读诗\n2:写诗\n3:想玩了\n"))
if x == 1:
f = open("/tmp/tangshi.txt","r")
for line in f:
print(line)
time.sleep(1)
f.close()
elif x == 2:
f = open("/tmp/tangshi.txt","a+")
tm = input("请输入七绝诗名:")
f.write(tm)
f.write("\n")
zz = input("请输入作者:")
f.write("作者:")
f.write(zz)
f.write("\n")
print("-----请输入诗句-----")
for i in range(4):
ts = input()
f.write(ts)
f.write("\n")
f.close()
elif x == 3:
print("----------再会----------")
break
else:
print("输入错误,请重新选择!")
continue
2、设计说明
- 创建一个tangshi.txt文件,里面存入一首七言绝句;
- 定义一个while循环,根据选择持续读诗或者写诗,1读诗,2写诗,3想玩了;
- 使用if语句执行使用r(读)方式打开文件还是a+(追加方式打开文件);
- 输入1表示读诗,为了控制读诗速度,引入sleep函数,每读一行暂停1秒钟;
- 输入2表示写诗,根据诗名、作者、诗句的顺序写入绝句;
- 输入过输入3,退出程序
- 输入其他告知输入错误。
3、实验测试
(base) [root@s186 python]# cat /tmp/tangshi.txt
黄鹤楼送孟浩然之广陵
作者:李白
故人西辞黄鹤楼,
烟花三月下扬州。
孤帆远影碧空尽,
唯见长江天际流。
(base) [root@s186 python]# python xpds.py
你是想读诗还是写诗?
1:读诗
2:写诗
3:想玩了
1
黄鹤楼送孟浩然之广陵
作者:李白
故人西辞黄鹤楼,
烟花三月下扬州。
孤帆远影碧空尽,
唯见长江天际流。
你是想读诗还是写诗?
1:读诗
2:写诗
3:想玩了
2
请输入七绝诗名:金缕衣
请输入作者:杜秋娘
-----请输入诗句-----
劝君莫惜金缕衣,
劝君惜取少年时。
花开堪折直须折,
莫待无花空折枝。
你是想读诗还是写诗?
1:读诗
2:写诗
3:想玩了
31
输入错误,请重新选择!
你是想读诗还是写诗?
1:读诗
2:写诗
3:想玩了
1
黄鹤楼送孟浩然之广陵
作者:李白
故人西辞黄鹤楼,
烟花三月下扬州。
孤帆远影碧空尽,
唯见长江天际流。
金缕衣
作者:杜秋娘
劝君莫惜金缕衣,
劝君惜取少年时。
花开堪折直须折,
莫待无花空折枝。
你是想读诗还是写诗?
1:读诗
2:写诗
3:想玩了
3
----------再会----------