文件操作

文件操作

 

什么文件?

  操作系统提供给用户操作复杂硬件(硬盘)的简易的接口

为什么操作文件

  人或者应用程序需要永久的保存数据

文件的打开过程

  • step1 点击需要打开的文件
  • step2 操作系统接收到命令,将文件路径传送给CPU
  • step3 CPU根据路径去硬盘中寻找文件,然后调取到内存中
  • step4 操作系统将调取的文件显示出来,可进行读写保存等操作

文件打开的模式

  r 只读模式

  w 只写模式

  a 追加写模式

操作文件单位的方式

  t 文本文件  t在使用的时候需要指定encoding参数 如果不知道默认是操作系统的默认编码
  b 二进制 (因为已经制定了用二进制模式)所以一定不能指定encoding参数

mode参数

  可以不写  不写的话默认是rt 只读的文本文件  这个t不写默认就是t

  r模式

with open(r'D:\Python项目\day07\a.txt',mode='r',encoding='utf-8') as f:
    print(f.readable())  # 是否可读
    print(f.writable())  # 是否可写
    print(f.read())  # 一次性将文件内容全部读出
# r模式在打开文件的时候 如果文件不存在 直接报错
# 文件路径可以写相对路径 但是需要注意该文件必须与执行文件在同一层文件下
with open(r'a.txt',mode='r',encoding='utf-8') as f:
with open(r'a.txt','r',encoding='utf-8') as f1:  mode关键字可以不写
    print(f.readable())  # 是否可读
    print(f.writable())  # 是否可写
    print(">>>1:")
    print(f.read())  # 一次性将文件内容全部读出
    print('>>>2:')
    print(f.read())  # 读完一次之后 文件的光标已经在文件末尾了,再读就没有内容了可读
    print(f.readlines())  # 返回的是一个列表  列表中的一个个元素对应的就是文件的一行行内容
    for line in f:  # f可以被for循环 每for循环依次 读一行内容
        print(i)  # 这个方法 就可以解决大文件一次性读取占用内存过高的问题
    print(f.readline())  # 只读取文件一行内容
    print(f.readline())
    print(f.readline())
    print(f.readline())

  w模式(慎用)

# 1.文件不存在的情况下 自动创建该文件
# 2.当文件存在的情况下 会先清空文件内容再写入
with open(r'xxx.txt',mode='w',encoding='utf-8') as f:
    print(f.readable())  # 是否可读
    print(f.writable())  # 是否可写
    f.write('不不不,你没有翻~\n')
    f.write('不不不,你没有翻~\n')
    f.write('不不不,你没有翻~\n')
    f.write('不不不,你没有翻~\r')
    f.write('不不不,你没有翻~')
    l = ['不sdffs,sdfs有翻~\n','不sdfsdf不,你sdfsf翻~\n','不sfad不,你没sa翻~\n']
    f.writelines(l)
    # 上下等价
    for i in l:
        f.write(i)

  a模式

# 1.当文件不存在的情况下 自动创建该文件
# 2.当文件存在的情况下,不清空文件内容, 文件的光标会移动文件的最后
with open(r'yyy.txt',mode='a',encoding='utf-8') as f:
    print(f.readable())  # 是否可读
    print(f.writable())  # 是否可写
    f.write('我是小尾巴\n')

 

 

其他模式补充

“纯净模式”

r 只读模式

w 写模式

a 追加写模式

“其他模式”

r+

w+

a+

 

r+模式

# 执行前的test.txt
# >>>>>>

天上的地上的
水里的
看的见的看不见的都是

# >>>>>>
with open(r'test.txt',mode='r+',encoding='utf-8') as f:
    print(f.readable())  # True # 是否可读
    print(f.writable())  # True # 是否可写
    print(f.readline())  # 天上的地上的 # 输出第一行内容 
    f.write('都是你的')
# 执行后的test.txt
# >>>>>>

天上的地上的
水里的
看的见的看不见的都是你的

# >>>>>>

在文档末尾加上了"都是你的"
# 当你指定r+b模式,即读为二进制
with open(r'test.txt',mode='r+b') as f:
    # 第一种解码方式
    res = f.read()
    print(res.decode('utf-8'))  # 都不见了

    #第二种解码方式
    res1 = str(res,encoding='utf-8')
    print(res1)  # 都不见了

w+模式

# w+模式下执行前的test.txt
# >>>>>>

天上的地上的
水里的
看的见的看不见的都是你的

# >>>>>>
with open(r'test.txt',mode='w+',encoding='utf-8') as f:
    print(f.readable())
    print(f.writable())
    print(f.readline())
    f.write('都不见了')
# w+模式下执行后的test.txt
# >>>>>>

都不见了

# >>>>>>
posted @ 2019-07-07 13:36  Bitten  阅读(169)  评论(0编辑  收藏  举报