Python中文件的操作

一 文件读取步骤

文件读取的三部曲: 打开–> 操作 -> 关闭

#打开
f=open('/tmp/file')
print(f)
#操作
f.write('hello')
#判断文件对象拥有的权限
print(f.readable()) #true  or false
print(f.writable())
#关闭
f.close() #一定要关闭
注意:文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的

二 文件读取模式的选择

open(filename[,mode]) 
  • filename代表所要读取的文件名,如不在当前目录,则需写出其绝对路径。
  • mode表示对文件以什么方式打开。
    在这里插入图片描述

三.非纯文本文档的读取

读取图片, 音乐或者视频(非文本文件), 需要通过二进制的方式进行读取与入,即模式选择加上b
读取二进制文件

rb:rb+:wb:wb+:ab:ab+:
f=open('frame1.png',mode='rb')
content=f.read()
f.close()
print(content)

在这里插入图片描述

四 文件的常用属性

1.buffer缓冲区对象

f=open('/mnt/passwd')
#buffer缓冲区对象
print(f.buffer)

在这里插入图片描述
suffer就是一个缓冲区对象
那么怎样来对缓冲区的内容进行读取呢
在这里插入图片描述
将缓冲区对象赋值给一个变量,通过遍历变量的内容来读取缓冲区的内容

>>> f=open('/mnt/passwd','a+')
>>> f.read()

当只是读取文件时, buffer里面没有内容

>>> f.write('123')
3
此时写入的内容在缓冲区里面,并没有真正写入磁盘文件,关闭之后写入文件
>>> f.buffer
<_io.BufferedRandom name='/mnt/passwd'>
>>> f.close()
  • buffer缓冲区对象
print(f.buffer)
  • 判断文件对象是否关闭, 已经关闭返回True
print(f.closed)
  • 文件号
print(f.fileno())
  • 文件对象
print(f.name)
  • 查看文件对象的相关信息
print(f)

五 文件常用方法

1.读取文件内容

  • 默认情况读取文件的所有内容, 小的文件, 直接用read读取即可,
  • 如果是一个大文件时(文件大小>内存大小), 不能通过read一次性读取所有容;
f.readline()	每次读取一行内容
f.readlines()	返回包含size行的列表,size未指定则返回全部行
f.readable()	 判断文件是否可读,函数的返回值为True或False

在这里插入图片描述
2.文件的写入操作

f.write()           从指针所在位置写入, 写入是字符串内容
f.writelines()      将列表里面的每个元素写入文件中
f.writable()        判断文件是否可写

在这里插入图片描述
3.指针位置的操作

f=open('/tmp/passwd','r+')
#告诉当前指针所在位置
print(f.tell())
print('1:',f.read(3))   #读取前三行
print('移动指针之前:',f.tell())
#将文件指针移动到文件最开始
#f.seek(0,0)
#将指针移动到文件最后
f.seek(0,2)
print('移动指针之后:',f.tell())
f.write('ptest')
f.close()

在这里插入图片描述

六 with语句

上下文管理器:打开文件, 执行完with语句内容之后, 自动关闭文件对象

with open('/tmp/lijia') as f:
    print('with语句里面:',f.closed)
    print(f.read())
print('after语句里面:',f.closed)

在这里插入图片描述
同时打开两个文件对象,(python2中不支持)

with open('/tmp/lijia') as f1,\
        open('/tmp/lijj','w+') as f2:
    #将第一个文件内容写入第二个文件中
    f2.write(f1.read())
    #移动指针到文件最开始
    f2.seek(0,0)
    #读取指针内容
    print(f2.read())

python2 中这样实现

with open('/tmp/lijia') as f1:
	content=f1.read()
with open('/tmp/lijj'.'w+') as f2:
	f2.write(content)

七 读取大文件

1.通过yield,每次读取一行进行处理

def byLineReader(filename):
    with open(filename) as f:
        line=f.readline()
        #如果可以读取到内容,则返回该行信息
        while line:
            yield line
            line=f.readline()
#read是一个生成器
read=byLineReader('data.txt')
print(read)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.直接for循环文件
默认遍历的内容为每一行的内容.是节省内存空间的

from collections import Iterable
f=open('data.txt')
print(isinstance(f,Iterable))
for i,item in enumerate(f):
    if i==10:
        break
    print(i,item)

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值