10.Python文件操作

1、文件操作模式

    ①、文件操作方法: open(fileName,mode):返回一个file对象   

    ②、文件操作模式:

        r : 只读

        rb: 二进制格式打开用于只读

        r+: 读写

        rb: 二进制格式用于读写

        w: 写入

        wb: 二进制格式用于写入

        w+: 读写(文件已存在会覆盖)

        wb+:二进制格式用于读写

        a:追加

        a+:读写(文件指针在末尾)

        ab+:二进制格式用于追加

2.读写文件

import os
# 拼接路径+创建文件(文件名不区分大小写)
currentPath = os.getcwd()
print(currentPath)
fullPath = currentPath+'/Other/ReadOrWrite.txt'
# 获取文件对象
file = open(fullPath,'w+')
# 文件数据写入
try:
    file.write('Hello Python')
except IOError:
    print('文件写入失败!!')
finally:
    file.close()

# 读取文件
file = open(fullPath,'r+')
fileMessage = file.read()
# 文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的.
file.close()
print(fileMessage)

3.使用 with ...file... as ...访问文件(推荐)

# 使用With语句自动帮助我们调用close方法
with open(fullPath,'r+') as f:
    print(r"with open(...) as f:",f.read())

# ValueError: I/O operation on closed file.<读写一个被关闭的文件>
# print(f.read())

# 二进制文件
with open(currentPath+'/Other/CaiBird.jpg','rb') as caiBird:
    for i,lineB in enumerate(caiBird.readlines()):
        print('第'+str(i + 1)+'行,数据:',lineB)

4.文件常用方法

# 写入文件:需要写入的数据系统会在空闲时进行写入操作,所以文件使用完成一定要关闭,否则会造成写入数据丢失
file.write()
# 写入文件:序列参数
file.writelines()
# 读取文件:会一次性读取所有文件,要特别注意大型文件,建议根据需求使用read(size)、readline()、readlines()等方法
file.read()
# 关闭文件:文件关闭之前会自动将内存中需要写入的数据写入文件
file.close()
# 刷新缓冲:直接把缓冲区的数据立刻写入文件
file.flush()
# 文件描述符:整形
file.fileno()
# 判断文件是否连接终端设备:
file.isatty()
# 设置/获取文件句柄位置
file.seek(offset=2)
file.tell()
# 截断文件:从首行字符开始,截断size个字符,无size标识从当前位置截取
file.truncate(size=100)

5、StringIO和BytesIO(file-like Object)

    注:像open()函数返回的这种有个read()方法的对象,在Python中统称为file-like Object。除了file外,还可以是内存的字节流,网络流,自定义流等等

from io import StringIO
from io import BytesIO

# StringIO:在内存中读写字符串(只能是str)
with StringIO('头部信息\n') as fileStr:
    # 使用write()之后会覆盖初始化的信息
    fileStr.write('Coder')
    fileStr.write('_')
    fileStr.write('LW\n\n\n')
    print(fileStr.getvalue().strip())

# ByteIO:在内存中读写Bytes
with BytesIO('Hello Python'.encode('UTF-8')) as fileByte:
    print(fileByte.getvalue())

6、序列化、反序列化 初步体验

import pickle

person = {'name':'Coder_LW','age':22,'height':1.80}
txtPath = os.getcwd()+'/Other/ReadOrWrite.txt'
# 将任意对象序列化成一个Bytes,然后就可以将Bytes写入文件。
bData = pickle.dumps(person)
print('二进制数据:',bData)
print('反序列化数据:',pickle.loads(bData))
os.remove(txtPath)
# 也可将对象序列化成为一个file-like Object
with open(txtPath,'wb+') as txtFile:
    # TypeError: write() argument must be str, not bytes
    personData = repr(person).encode('UTF-8')
    pickle.dump(personData,txtFile,2)

with open(txtPath,'rb+')as tFile:
    print('每次写入只有要先关闭再去读取:',pickle.load(file=tFile,encoding='UTF-8'))

 

转载于:https://my.oschina.net/CoderW/blog/995268

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值