文件操作,集合,深浅拷贝
一. 文件操作
1. 基本读写文件的方式
1 | # open第一个参数是文件名(也可以是一个路径),如果文件存在则打开存在文件,不存在则新建文件,第二个为打开方式,之后会一一介绍各种打开方式,最后一个参数为编码方式 |
文件的读和写操作通过文件中的光标来定位,从而知道该从哪里写,从哪里读。首先介绍一下相应的方法
f.tell() # 返回光标当前位置,一个英文字符占一个,中文占三个(标准,是编码的关系)
f.seek(4) # 调整光标位置,这里表示到第四个字节的位置
f.truncate(10) # 截断,打开方式应该为’a’,表示从第十个字节之后的都删除,只保留前十个字节
1 | ----------------------------------------------------------------------------------------------------------------- |
2. 读写文件的基本操作
1 | print(f.fileno()) # 每打开一个文件都会有一个唯一的编号 |
3. 读写文件的缓存问题
在我们向文件中写东西的时候,如果没有执行到f.close(),则已经写的内容不会出现在文件中
通过f.flush()将内容压入
1
2
3
4
5
6
7
8
9
10
11 import time
f = open('MyTxt', 'a', encoding='utf8')
f.write('zhangjitao')
time.sleep(20) # 执行完写的语句,等待20秒后才真正写入文件
f.close()
---------------------------------
f = open('MyTxt', 'a', encoding='utf8')
f.write('zhangjitao')
f.flush() # 直接将缓存中的内容写入硬盘
time.sleep(20) # #执行完写的语句,等待20秒后才真正写入文件
f.close()
实例1
2
3
4
5import sys,time
for i in range(30):
sys.stdout.write("*") # 只是放到缓存,到最后一次打印:******************************
sys.stdout.flush() # sys.stdout为一个文件对象。先将该语句注释,之后再取消注释,查看效果。。就懂了。。
time.sleep(1)
4. 修改已有文件内容
一般不直接在源文件之中修改,而是在查询需要修改的内容的过程中将源文件拷贝到新文件中同时修改。
1
2
3
4
5
6
7
8 f = open('1', 'r+', encoding='utf-8')
f2 = open('2', 'w', encoding='utf-8')
for i in f:
if i.startswith('画'):
i = ''.join([i.strip(), 'hhhh\n'])
f2.write(i) # 将修改过后或者没有修改的内容写入新文件。。
f2.close()
f.close()
5. 另一种格式
1 | # with打开文件省去close() |
二. 深浅拷贝
个人理解,指的是:我是只拷贝了你一个地址还是拷贝了你的所有内容。。这又涉及到可变类型和不可变类型了
不再细讲,之后有时间另开一节细讲。
1
2 import copy # 在copy模块中有一个方法deepcopy()能够深拷贝,。
copy.deepcopy()
三. 集合(一个数学工具)离散数学学过的。。
在程序中的作用:1.去重, 2.关系测试,3.交集,并集,子集,超集
集合的特性:
- 集合的对象必须是可哈希的,可以作字典的健
- set是无序的,且不可重复,可变集合
- 但是集合本身不可哈希
- 不可变集合frozenset
- 通过in和not in 判断元素是否在集合里面
1. 创建
1 | s = set('alex li') # 有重复的保留一个 |
2. 更新
1 | li = [1, 2, 'zhangjitao'] |
3. 删除
1 | s.remove(2) |
4. 方法
1 | print(set('zhang') < set('zhangjit')) # 包含关系,子集, |