python文件操作详解

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

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值