学习python入门基础——文件操作

  1.open()
    1)file:要打开的文件,有特殊字符时,用r转义
    2)mode='r':读、写、读+写
    3)buffering=None:设置缓冲策略
    4)encoding=None:编码格式,支持中文时encoding=UTF-8
    5)errors=None:指定编码错误处理的方式
    6)newline=None:换行的控制,\n
    7)closefd=True:文件关闭的时候,文件描述要不要关闭,默认true是关闭
  2.文件读取
    1)read():读取文件的所有数据,默认从头开始,读取出来的是字符串

f=open(file=r'D:\PycharmProjects\pythonProject\0323\1.txt',mode='r',encoding='utf-8')        #要打开的文件路径,读的权限,支持中文
result=f.read() #读取文件
print(result,type(result)) #读取出来是str类型
f.close() #关闭

    2)readline():读取第一行数据,返回字符串,省内存

f=open(file=r'D:\PycharmProjects\pythonProject\0323\1.txt',mode='r')
result=f.readline()        #只读取第一行数据
print(result,type(result))
f.close()

    3)readlines():按行读取所有文件的数据,返回list,每行就是list的一个元素,换行符也会读出来

f=open(file=r'D:\PycharmProjects\pythonProject\0323\1.txt',mode='r',encoding='utf-8')
result=f.readlines()        #以list的形式读取所有数据,一行为一个元素
print(result,type(result))
f.close()

  3.写文件
    1)write('写入的内容'):覆盖写入文件

f=open(file=r'D:\PycharmProjects\pythonProject\0323\1.txt',mode='w',encoding='UTF-8')
result=f.write('你是猪吗') #会覆盖文件原先的所有内容
f.close()

    2)writelines('写入的内容'):覆盖写入,写入时不会换行,所有数据都会写在同一行,加上换行符\n可换行

f=open(file=r'D:\PycharmProjects\pythonProject\0323\1.txt',mode='w',encoding='UTF-8')
date=('你是猪\n','我不是猪\n','我是你爸爸','hhhh')
result=f.writelines(date)
f.close()

  4.mode参数
    1)r:只读文件
    2)w:只写文件(覆盖)
    3)a:只写文件(追加写入),在末尾追加

f=open(file=r'D:\PycharmProjects\pythonProject\0323\1.txt',mode='a',encoding='UTF-8')
result=f.write('气死你') #从末尾追加写
f.close()

    4)r+:可以读&可以覆盖写
    5)w+:可以读&可以覆盖写
    6)a+:可以读&可以追加写

f=open(file=r'D:\PycharmProjects\pythonProject\0323\1.txt',mode='a+',encoding='UTF-8')
result=f.write('啦啦啦')
f.seek(0) #先写再读时,因为写入后默认光标是在最后,所以需要用seek来将光标放到开头
result_01=f.read()
f.close()

    7)rb:二进制形式读取图片
    8)wb:二进制形式写入图片
    9)ab:二进制形式追加图片
  5.光标操作:seek()
    1)offset:行(偏移量)

       如“路飞学城” 用gbk存是2个字节一个字,用utf-8就是3个字节,因此以gbk打开时,seek(4) 就把光标切换到了“飞”和“学”两个字中间。
       但如果是utf8,seek(4)会导致,拿到了飞这个字的一部分字节,打印的话会报错,因为处理剩下的文本时发现用utf8处理不了了,因为编码对不上了。少了一个字节。
    2)whence:列
      默认是0
      0:表示从开头开始偏移
      1:表示从光标当前位置开始偏移
      2:表示从文件末尾开始偏移

f=open(file=r'D:\PycharmProjects\pythonProject\0323\1.txt',mode='a+',encoding='UTF-8')
result=f.write('啦啦啦')
f.seek(0) #先写再读时,因为写入后默认光标是在最后,所以需要用seek来将光标放到开头
result_01=f.read()
f.close()

  6.文件保存

    1)写文件的时候都是往内存区域里去写,等程序运行结束后,从内存区写到文件

import time
f=open(file=r'D:\PycharmProjects\pythonProject\0323\1.txt',mode='a+',encoding='UTF-8')
num=0
while num<10:
time.sleep(1) #每秒一次
print('test')
f.write('python\n')
num +=1
f.close() #等程序结束后一次性写入到文件中

    2)flush():将内存里的缓冲区域的文件写入到文件保存,需要写入大量数据时,建议一边写一边保存

import time
f=open(file=r'D:\PycharmProjects\pythonProject\0323\1.txt',mode='a+',encoding='UTF-8')
num=0
while num<10:
time.sleep(1)
print('test')
f.write('python\n')
f.flush() #一边保存一边写入
f.close()

7.上下文管理器
    with open:不需要手动关闭

with open(file=r'D:\PycharmProjects\pythonProject\0323\1.txt',mode='a+',encoding='UTF-8') as f:      #as取个别名
f.seek(0)
result=f.read()
print(result)
posted @ 2022-05-18 22:19  芒果93  阅读(147)  评论(0编辑  收藏  举报