文件处理及处理模式

 1.文件的基本介绍

什么是文件? 操作系统提供给用户操作复杂硬件(硬盘)的简易的接口

为什么要操作文件? 人或者应用程序需要永久的保存数据

如何使用?

f = open()     #表示打开文本

f.read()      #表示读取文本内的所有内容

f.close()  #表示关闭文件

都是通过python代码来操作文件

f = open(r' 文件地址,ending = 'utf-8')    #向操作系统发送请求 打开某个文件,    r 表示取消转义
# 应用程序要想操作计算机硬件 必须通过操作系统来简单的操作
print(f)    # f是文件对象
print(f.read())  #windows操作系统默认的编码是gbk
f.read()  #向操作系统发送请求 读取文件内容
f.close()  # 告诉操作系统 关闭打开的文件
print(f)
print(f.read())

2.文件上下文操作 (可同时打开多个文本文件)

with open(r'文件位置','r',ending = 'utf-8') as f   #f仅仅是一个变量名,可以把它看成是一个遥控器

操作文件单位的方式

文本文件 t在使用的时候需要指定encoding参数, 如果不指定,就默认是操作系统的默认编码

rb指二进制模式,在含‘b’的模式中,不需要指定encoding参数。

文件打开的模式有三种:①r 只读模式;② w 只写模式;③ a 追加写模式

2.操作文件单位的方式:

(1)t 文本文件。t在使用的时候需要指定encoding参数 如果不知道默认是操作系统的默认编码

(2)b 二进制 。一定不能指定encoding参数

mode参数可以不写,不写的话默认是rt只读的文本文件,这个t不写默认就是t

with open(r' 文本位置地址',mode='r',encoding='utf-8') as f:
print (f.readable( )) #是否可读
print (f.writable( ))    #是否可写
print (f.read( ))    #一次性将文件的内容全部读出

(3)r 模式在打开文件的时候,如果文件不存在,直接报错

文件路径可以写相对路径,但是需要注意该文件必须与执行文件在同一层文件下

with open(r'文件位置地址,encoding='utf-8') as f: 其中mode关键字可以不写
print(f.readable())
print(f.writable())
print(">>>1:")
print(f.read()) # 一次性将文件内容全部读出
print('>>>2:')
print(f.read()) #读完一次之后,文件的光标已经在文件末尾了,再读就没有内容可读了
print(f.readlines())#返回的是一个列表,列表中的一个个元素对应的就是文件的一行行内容
for line in f:# f 可以被for循环for每循坏一次就读一行内容
print(i)#这个方法可以解决大文件一次性读取占用内存过高的问题
print(f.readline()) #只读取文件的一行内容

(4)w模式:w模式一定要慎用

1.文件不存在的情况下 自动创建该文件

2.当文件存在的情况下 会先清空文件内容再写入

with open(r'xxx.txt',mode='w',encoding='utf-8') as f:
print(f.readable()) # 是否可读
print(f.writable()) # 是否可写

(5)a模式   追加模式(将内容追加到尾部)

1.当文件不存在的情况下 自动创建该文件

2.当文件存在的情况下,不清空文件内容, 文件的光标会移动文件的最后

with open(r'yyy.txt',mode='a',encoding='utf-8') as f:
print(f.readable()) # 是否可读
print(f.writable()) # 是否可写
f.write('我是小尾巴\n')

 3.打开文本的模式有以下几种

(1).打开文件的模式有(默认为文本模式):

r ,只读模式【默认模式,文件必须要存在,如果不存在会出现报警】

w,只写模式【不可读;不存在则会创建;存在则清空内容】

a,之追加写模式【不可读;不存在则创建;存在则只追加内容】

(2).对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作

rb、wb、ab

注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

(3)."+" 表示可以同时读写某个文件

r+, 读写【可读,可写】

w+,写读【可读,可写】

a+,写读【可读,可写】

补充:在 rt 模式下,read内的数字表示的是字符的个数,除此之外,数字表示的都是字节

with open(r'test','r',encoding='utf-8') as f:
print(f.read(5))

(4).文件内光标的移动

f.seek(offset,whence)    # seek的长度是按字节来计算的

  offset:相对偏移量  光标移动的位数

whence:

0:参照文件的开头   t和b都可以使用

1:参照光标所在的当前位置  只能在b模式下用

2:参照文件的末尾  只能在b模式下使用

5.截断文件

with open(r'文本位置',‘a’,encoding=utf-8')as f:
  f.truncate(6)  # 接收的字节的长度(整型),
  保留0~6字节数 后面的全部删除(截断)

6.修改文件1

先将数据由硬盘读到内存(读文件)

在内存中完成修改(字符串的替换)

再覆盖原来的内容(写文件)

复制代码
with open(r'test02.txt','r',encoding='utf-8') as f:
    data = f.read()    #只读模式
    print(data)
    print(type(data))   #查看data的数据类型

with open(r'test02.txt','w',encoding='utf-8') as f:
    res = data.replace('egon','jason')      #repalce(旧值,新值)
    print(data)
    f.write(res)    #
复制代码
优点:任意时间硬盘上只有一个文件 不会占用过多硬盘空间
缺点:当文件过大的情况下,可能会造成内存溢出
文件修改方式2
创建一个新文件
循环读取老文件内容到内存进行修改 将修改好的内容写到新文件中
将老文件删除 将新文件的名字改成老文件名
复制代码
import os
with open(r'旧的文本位置','r',encoding='utf-8') as read_f,\
        open(r'新建的文本位置','a',encoding='utf-8') as write_f:
    for line in read_f:
        new_line = line.replace('jason','egon')
        write_f.write(new_line)
os.remove('旧的文本位置t')
os.rename('新的文本位置','旧的文本位置’)
#通过新建一个文本文件来取代旧的文本文件
优点:内存中始终只有一行内容 不占内存
缺点:再某一时刻硬盘上会同时存在两个文件

转载于:https://www.cnblogs.com/blue-tea/p/11141099.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值