190328文件处理

一、文件处理初识

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过文件句柄对文件进行操作
  3. 关闭文件
  • 文本示例
汉皇重色思倾国,御宇多年求不得。
杨家有女初长成,养在深闺人未识。
天生丽质难自弃,一朝选在君王侧。
回眸一笑百媚生,六宫粉黛无颜色。
春寒赐浴华清池,温泉水滑洗凝脂。
侍儿扶起娇无力,始是新承恩泽时。
  • 基本操作
f = open("长恨歌", 'r', encoding="utf-8")  # open函数会使用当前系统的编码打开
data = f.read()
print(data)
f.close()

二、基本文件处理

  • 读模式:r
f = open("长恨歌",'r', encoding="utf-8")  # open函数会使用当前系统的编码打开

print(f.read())  #读取全部,按字符读
print(f.readable())  #判断文件是否可读  True
print(f.readline(), end='')  #读一行,end='' 换行符
print(f.readline())  #杨家有女初长成,养在深闺人未识。
print(f.readlines())  #将所有行读处理放到列表中

f.close()
  • 写模式:w
  1. 只有字符串才能写到文件中
f = open("dongfei_file", 'w', encoding="utf-8")

f.write("汉皇重色思倾国,御宇多年求不得。\n")
f.write("杨家有女初长成,养在深闺人未识。\n")
print(f.writable())  #判断文件是否可写  True
f.writelines(["天生丽质难自弃,一朝选在君王侧。\n", "回眸一笑百媚生,六宫粉黛无颜色。\n"])  #将列表中的元素写到文件中

f.close()
  • 追加模式:a
f = open("dongfei_file", 'a', encoding="utf-8")

f.write("春寒赐浴华清池,温泉水滑洗凝脂。")  #写到文件最后

f.close()
  • 读写模式:r+

  • 写读模式:w+,x+,a+

  • 模拟修改文件,硬盘上的文件是无法修改的

f = open("dongfei_file", 'r', encoding="utf-8")
data = f.readlines()
f.close()

f2 = open("new_dongfei_file", 'w', encoding="utf-8")
f2.writelines(data[0])  #文件的处理逻辑
f2.close()
  • 自动关闭文件
with open("a.txt", "r", encoding="utf-8") as src_f, \
        open("new_a.txt", "w", encoding="utf-8") as des_f:
    data = src_f.readline()
    des_f.write(data)
    print(data)
  • 二进制读:rb
with open("a.txt", "rb") as f:
    data = f.read()
    print(data)
    print(data.decode())
  • 二进制写:wb
with open("b.txt", "wb") as f:
    f.write(bytes("dongfei 你好\n", encoding="utf-8"))
    f.write("dongfei2 你好".encode("utf-8"))
    f.write(b"dongfei3\n")  #这样方法不能写中文
  • 二进制追加:ab

  • 文本模式:t

  • 二进制模式:b,二进制模式可以跨平台

  • 其他方法:

f = open("c.txt", "w", encoding="utf-8")
print(f.closed)  #判断文件是否是关闭的
print(f.encoding)  #打印文件打开的编码
f.flush()  #将内存中修改的数据保存至硬盘
print(f.tell())  #光标当前所在位置
f.seek(0)  #控制光标的移动,按字节移动
f.truncate()  #截取
  • 光标操作
#绝对位置seek
with open("dongfei_file", "r", encoding="utf-8") as f:
    print(f.tell())  #0
    f.seek(10)
    print(f.tell())  #10
    f.seek(3)
    print(f.tell())  #3,默认从文件开头seek

#相对位置seek
with open("dongfei_file", "rb") as f:
    print(f.tell())  #0
    f.seek(10,1)
    print(f.tell())  #10
    f.seek(3,1)
    print(f.tell())  #13 ,以相对位置seek

#倒叙位置seek
with open("dongfei_file", "rb") as f:
    print(f.tell())  #0
    f.seek(-10,2)  #倒叙seek,-10是往回移动
    print(f.tell())
    f.seek(-3,2)
    print(f.tell())  #以相对位置seek
  • 读出文件的最后一行
with open("dongfei_file", "rb") as f:
    for i in f:
        offs = -10
        while True:
            f.seek(offs,2)
            data = f.readlines()
            if len(data) > 1:
                print("文件的最后一行:",data[-1].decode("utf-8"))
                break
            offs *= 2
posted @ 2019-03-29 19:40  生生不息.连绵不绝  阅读(136)  评论(0编辑  收藏  举报