1 #coding=utf-8
2 #seek 移动光标 是按字节来移动,注意汉字字节 utf-8 是三个字节 gbk 是两个字节
3 #read是字符读取
4 with open("test","w",encoding="utf-8") as f:
5 f.write("我爱你\nbaby\n")
6
7 with open("test","r+",encoding="utf-8") as f:
8 print(f.tell()) #位置 0
9 print(f.read(2)) #是读三个字符 我爱
10 f.seek(1) #位置移动 1,向前移动一个字节了 但是光标移动是最开始位置移动
11 print(f.tell()) #向前移动一个字节了 从这里就可以看出 光标位置在 第一个位置 打印的就是 1
12 #print(f.read()) # 这里就读不出来要报错说 utf8 不能解码,说开始的字节位置不对
13 # ,要是读出来 可能乱码,也可能巧合读一些字
1 #coding=utf-8
2 #seek 移动光标 是按字节来移动,注意汉字字节 utf-8 是三个字节 gbk 是两个字节
3 #默认就是相对 0 的位置 移动 一般()里面就没有写 0 这里也不用指定打开模式为 b
4 #但是相对 移动一定要以 b 模式打开后进行移动
5 #read是字符读取
6 with open("test","w",encoding="utf-8") as f:
7 f.write("我爱你\nbaby\n")
8
9 with open("test","r+",encoding="utf-8") as f:
10 print(f.tell()) #位置 0
11 print(f.read(2)) #是读三个字符 我爱
12 f.seek(1) #位置移动 1,向前移动一个字节了 但是光标移动是最开始位置移动
13 print(f.tell()) #向前移动一个字节了 从这里就可以看出 光标位置在 第一个位置 打印的就是 1
14 #print(f.read()) # 这里就读不出来要报错说 utf8 不能解码,说开始的字节位置不对
15 # ,要是读出来 可能乱码,也可能巧合读一些字
16 f.seek(3) #这里还是从最开始位置移动的
17 print(f.read(2)) #这里读出来的就是 我 后面的两个字符 注意read 是读字符 哦 所以就 爱你
18
19
20 with open("test","rb+") as f:
21 #看 seek 还有很多参数方法 这里就是相对移动 需要使用 b 模式打开
22 print(f.tell())
23 #位置 0
24 f.seek(3) #移动到 我后面
25 print(f.read(3).decode("UTF-8"))
26 #读字符 爱的 三个编码 解码就是 爱 费解这里read 就是一个编码一个编码读取的和seek一样
27 #跟编码方式有关 read 和seek 在 二进制 b模式打开 读取就是一样的
28 print(f.tell()) #位置 6 两个汉字就 6
29 f.seek(3,1) #这个就是相对目前位置 向后移动两个字节 这里就到了\n后面,# b前面
30 print(f.tell()) # 位置 9 两个汉字 + 你 就 9 了, 就到了\r\n的前面了
31 print(f.read(2)) #读取了换行 \R\N
32 print(f.tell()) #就是11
33 with open("test","rb+") as f:
34 #看看向后面读取,从后网钱读取 采用参数 2 前面移动位数用 负数
35 # 可以为正 但是这就是网后面读正数个位 不要这样操作
36 #还是b模式打开
37 print(f.tell()) #位置是 0
38 f.seek(-1,2)
39 print(f.tell()) # 位置是 16 文本共计17个字节
40 print(f.read()) #打印肯定是\n
41
42 f.seek(-2, 2)
43 print(f.tell()) # 位置是 15 文本共计17个字节
44 print(f.read()) # 打印肯定是\r\n
45
46 #如果只是读取最后一行 比如找日志 都是从后网钱找 就要用 2 模式
47 with open("test","rb+") as f:
48 #定义偏移量 offset = 3 我们每段较短 这个值是预估的
49
50 # data=f.readlines()
51 # print (len(data))
52 #循环文件 就用这个 f 句柄就好 不要用 read 或者 readlines
53 # for i in f:
54 offset = -2
55 while True:
56 f.seek(offset, 2)
57 data = f.readlines()
58 print(data)
59 if len(data) > 1:
60 print(data[-1].decode("utf-8"))
61 break
62 else:
63 offset *= 2
64
65
66 with open("test","rb+") as f:
67 #定义偏移量 offset = 3 我们每段较短 这个值是预估的
68
69 # data=f.readlines()
70 # print (len(data))
71 #循环文件 就用这个 f 句柄就好 不要用 read 或者 readlines
72 for i in f:
73 print (i)