文件基本操作
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