day8 文件操作

文件基本操作

1 # 打开文件
2 f = open("小重山","r",encoding="utf-8")
1 # readline 方法 只查看一行
2 a = f.readline()
3 print(a)
4 print(f.readline()) # 打印的时候会打印出来每行的最后的换行符
1 #readlines 方法 查看全部行 可for循环进行遍历 并对每一行进行特殊操作比如加点东西去空格之类的
2 print(f.readlines())
1 #关闭文件
2 f.close() 

文件打开方式

  文件的模式:r , w , a ,默认打开文件就是只读模式。
 1 f = open("陈粒","r",encoding="utf-8")     # open 会检查系统的编码,然后用系统的编码方式去检索句柄来打开文件
 2 # data = f.read()                        # 获取读取内容
 3 # print(data)
 4 print(f.readable())                        # 判断是否可读
 5 print("第一行",f.readline(),end="")        # 按行读,格式就是 .readline() 无参数可以加。就是度一行
 6 print("第二行",f.readline(),end="")        # 读取的时候是按照光标位置读
 7 print("第三行",f.readline(),end="")
 8 print("第四行",f.readline(),end="")
 9 print("第五行",f.readline(),end="")
10 print("第六行",f.readline(),end="")
11 f.close()                                # 一直不关会占用操作系统的资源无法释放
1 # w,写模式,不论是否存在只要写就会清除内容然后重建相同名字的文件
2 f = open("陈粒","w",encoding="utf-8")
3 # f.read()                                    # 写模式是不可读的
4 f.write("1111111
")
5 f.write("222222222
")
6 # f.write(123)                                # 写的时候必须写的是字符串,其他会报错
7 f.writable()                                # 判断是否可写
8 f.writelines(["456
","86
","5
"])        # 写入列表
9 f.close()
1 # r+ 读写模式
2 f = open("陈粒1","r+",encoding="utf-8")
3 f.write("写在文件最后")
4 f.close()

光标的操作

1 # 查看当前的光标位置
2 print(f.tell())
3 print(f.read(2))
4 print(f.tell())
5 
6 # 调整光标位置
7 f.seek(0)
8 print(f.tell())
 1 f = open("seek.txt","rb")
 2 print(f.tell())
 3 f.seek(10)
 4 f.seek(10,0)            # 默认的工作模式就是 0 ,绝对位置,从头开始移动
 5 f.seek(10,1)            # 工作模式为 1 ,相对位置,从当前的光标位置才移动
 6 print(f.tell())
 7 f.seek(-3,1)            # - 可以像左移动
 8 print(f.tell())
 9 f.seek(-3,2)            # 工作模式为 2 ,从末尾开始倒着读,倒着必须要用负数想做移动
10                         # 已经最末尾了,怎么再向右移动?石乐志
11                         # 日志文件的最后追加是很多的,这个命令查询日志很好用。
12 print(f.tell())

创建进度条

1 # 进度条的创建
2 import  sys,time
3 for i in range(30):
4     sys.stdout.write("*")
5     sys.stdout.flush()
6     time.sleep(0.1)

文件修改

1 # 文件修改
2 src_f = open("xxx","r",encoding="utf-8")
3 data = src_f.readlines()
4 src_f.close()
5 print(data)
6 drc_f = open("xxx","w",encoding="utf-8")
7 # drc_f.writelines(data)
8 drc_f.write(data[0])
9 drc_f.close()
1 # 完成文件修改的更高端的操作
2 with open("xxx","r",encoding="utf-8") as src_f,
3         open("xxx_new","w",encoding="utf-8") as dst_f:
4     data = src_f.read()
5     dst_f.write(data)
1 # 不在需close ,with open as 方法
2 with open("a.txt","w")as f:
3     f.write("yangtuo
")

其他整合操作

 1 f = open("a.txt","w",encoding="utf-8",newline="")     # 默认的编码方式为系统的方式,
 2 # newline读取转换方式 ,windows的回车是
 ,如果默认的话,会按照
 记录,这样可以将回车只用

 3 
 4 print(f.closed)     # 查看文件是否关闭,false 表示未关闭
 5 
 6 print(f.encoding)    # 查看文件打开的编码方式,而不是文件本身的编码方式
 7 
 8 f.flush()            # 即时的刷新,系统会自动保存但是有延时,手动刷新
 9 
10 print(f.read(7))            # 读文件,从当前光标位置按照字符数量来读,
11                             # 除了read是按字符,其他都是按字节
12 
13 print(f.readline())        # 按行读,只读一行
14 
15 print(f.readlines())        # 按行读且将读取的内容放在列表里面
16 
17 f.tell()            # 显示目前的光标位置
18 
19 f.seek(5)            # 移动光标位置,数字表示字节数,不是按照字符数
20                     # 比如一个汉字三个字节。你只读一个字节。这个汉字是无法显示的,
21                     # utf-8的汉字是三个字节为单位存储
22 
23 f.truncate(10)    # 从头开始截取到第10个字节,其他都丢了
24                     # 不可以用w w+ 的方式打开啊。用w打开文件内容会清空你还截取个p
25 
26 f.close()        # 关闭文件

查看大文件最后一行的常用方法,通常用于日志文件的查询
 1 # 如何查看文件的最后一行,使用了seek的玩法
 2 # 循环文件的方式,一行一行的
 3 for i in f:
 4     offs = -10                             # 定义一个偏移量
 5     while True:                            # 定义一个死循环
 6         f.seek(offs,2)                    # 将光标移动到文章末尾向前偏移量大小的位置
 7         data = f.readlines()            # 保存然后读出来光标往后的内容列表保存起来
 8                                         # 其实就是你偏移量的内容
 9         if    len(data) >1 :                # 如果列表长度超过 1 ,表示已经读取到了最后一行,直接打印就可以了。
10                                         # 如果列表长度没超过 1 ,表示没读完最后一行,再循环读几次偏移量大小。
11             print("文件的最后一行是%s" %(data[-1].decode("utf-8")))
12             break
13         offs *= 2

原文地址:https://www.cnblogs.com/shijieli/p/9681675.html