1.今天来详细介绍下python的IO。
2.字符串读文件
2.1一次性读取 read()
file_path = 'C:/1111111.txt'
try:
# 只读打开文件,文件不存在 抛出一个IOError的错误
fd = open(file_path, 'r')
## 一次读取所有内容
fd_content = fd.read()
print(fd_content)
finally:
if fd:
fd.close() ## 关闭文件描述符
每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法,下面等同上面的try … finally 。
with open(file_path,'r') as fd:
print(fd.read())
2.2一行一行读取 readlines()
with open(file_path,'r') as fd:
for line in fd.readlines():
print(line.strip()) # print会加个'\n' strip就是去掉这个'\n'的
2.3指定编码
file_path = 'C:/1111111.txt'
with open(file_path,'r',encoding='gbk') as fd:
print(fd.read())
遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:
f = open(file_path, 'r', encoding='gbk', errors='ignore')
3.二进制读文件 模式用’rb’就行
file_path = 'C:/1111111.avi'
with open(file_path,'rb') as fd:
print(fd.read())
4.写文件
4.1 覆盖写
file_path = 'C:/2222.txt'
## 覆盖写
with open(file_path,'w',encoding='utf-8') as fd:
fd.write('我是大傻逼')
4.2追加写
file_path = 'C:/2222.txt'
## 追加写
with open(file_path,'a',encoding='utf-8') as fd:
fd.write('我是大傻逼')
5.详细model值
"r" 以读方式打开,只能读文件 , 如果文件不存在,会发生异常
"w" 以写方式打开,只能写文件, 如果文件不存在,创建该文件,如果文件已存在,先清空,再打开文件
"rb" 以二进制读方式打开,只能读文件 , 如果文件不存在,会发生异常
"wb" 以二进制写方式打开,只能写文件, 如果文件不存在,创建该文件, 如果文件已存在,先清空,再打开文件
"rt" 以文本读方式打开,只能读文件 , 如果文件不存在,会发生异常
"wt" 以文本写方式打开,只能写文件, 如果文件不存在,创建该文件,如果文件已存在,先清空,再打开文件
"rb+" 以二进制读方式打开,可以读、写文件 , 如果文件不存在,会发生异常
"wb+" 以二进制写方式打开,可以读、写文件, 如果文件不存在,创建该文件,如果文件已存在,先清空,再打开文件
6.文件指针的移动
文件指针: 文件被打开后,其对象保存在 fd 中, 它会记住文件的当前位置,以便于执行读、写操作,这个位置称为文件的指针( 一个从文件头部开始计算的字节数 long 类型 )。
注意:必须以模式’b’二进制方式打开
with open(file_path,'wb') as fd:
print('当前指针位置:', str(fd.tell()))
## 将指针移到 文件最开始位置
fd.seek(0)
fd.write(bytes('ac', encoding = "utf8") )
print('当前指针位置:',str(fd.tell()))
## 1:从当前位置 -1:向前移动一个字节
fd.seek(-1,1)
print('当前指针位置:', str(fd.tell()))
## 结果是ab , 会把原来的c位置直接覆盖成b
fd.write(bytes('b', encoding="utf8"))
fd.tell() : 获取当前指针位置.
fd.seek(p,0) 移动到文件开头之后p个字节处
fdf.seek(p,1) 移动到当前位置之后的p个字节,可以为负数
fd.seek(p,2) 移动到文件末尾之后的p个字节
7.文件的其它操作
7.1递归遍历目录
import os
def listDir(rootDir):
for lists in os.listdir(rootDir):
path = os.path.join(rootDir, lists) ## 字符串拼接
print(path)
if os.path.isdir(path): ## 是目录,继续递归
listDir(path)
listDir('c:/')
7.2文件删除
import os
#删除文件:
os.remove()
#删除空目录:
os.rmdir()
#递归删除空目录:
os.removedirs()
7.3判断文件,目录是否存在
import os
os.path.isfile('test.txt') #如果不存在就返回False
os.path.exists(directory) #如果目录不存在就返回False
老生常谈:深圳有爱好音乐的会打鼓(吉他,键盘,贝斯等)的程序员和其它职业可以一起交流加入我们乐队一起嗨。我的QQ:657455400