学习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)