文件操作的补充

1 "+" 模式

"""
r
w
a
将上面的三个模式称为纯净模式
r+
w+
a+
"""

with open(r'test',mode='r+',encoding='utf-8') as f:
     print(f.readable())
     print(f.writable())
     print(f.readline())
     f.write('嘿嘿嘿')



 with open(r'test',mode='w+',encoding='utf-8') as f:
     print(f.readable())
     print(f.writable())
     print(f.readline())
     f.write('嘿嘿嘿')


 with open(r'test',mode='r+b') as f:
     print(f.readable())
     print(f.writable())
     res = f.read()
     # print(res.decode('utf-8'))
     res1 = str(res,encoding='utf-8')
     print(res1)

2 光标的移动

1 在rt模式下,read()中的数值表示的是字符的个数,除此之外其他模式都是表示的字节

2 光标在文件中的移动

seek 有两个参数  第一个表示偏移量,第二个表示模式

第一个参数。可以是任意整数,

第二个参数在,0,1,2,中

0  参照文件开头  t,b模式都可以使用

1  参照文件所在当前位置  b模式可使用

2  参照文件末尾位置  b模式可以使用

 

注意seek移动的是字节 数

with open(r'test','rt',encoding='utf-8') as f:
    print(f.read(1))
    # f.seek(6,0)  # seek移动都是字节数
    # f.seek(4,0)  # seek移动都是字节数
    # print(f.read(1))
    f.seek(0,0)
    print(f.read(1))
    f.seek(0, 0)
    print(f.read(1))
    f.seek(6,0)
    print(f.read())



with open(r'test','rb') as f:
    print(f.read(3).decode('utf-8'))
    f.seek(0,0)
    print(f.read(3).decode('utf-8'))
    f.seek(7,0)
    print(f.read(1).decode('utf-8'))
    # f.seek(6,0)  # seek移动都是字节数
    # f.seek(4,0)  # seek移动都是字节数

with open(r'test','rb') as f:
    print(f.read(3).decode('utf-8'))
    f.seek(3,1)
    print(f.read(1))
    f.seek(6,0)  # seek移动都是字节数
    f.seek(4,0)  # seek移动都是字节数


with open(r'test','rb') as f:
    print(f.read())
    f.seek(-4,2)
    print(f.read().decode('utf-8'))

with open(r'test','r+',encoding='utf-8') as f:
    f.seek(3,0)
    f.write('过')

3 截断文件

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

4 文件的修改

1 第一种方法

修改文件
先将数据由硬盘读到内存(读文件)
在内存中完成修改(字符串的替换)
再覆盖原来的内容(写文件)
with open(r'test02.txt','r',encoding='utf-8') as f:
    data = f.read()
    print(data)
    print(type(data))

with open(r'test02.txt','w',encoding='utf-8') as f:
    res = data.replace('egon','jason')
    print(data)
    f.write(res)

 

"""
优点:任意时间硬盘上只有一个文件 不会占用过多硬盘空间
缺点:当文件过大的情况下,可能会造成内存溢出
"""

2 第二种方法

文件修改方式2
创建一个新文件
循环读取老文件内容到内存进行修改 将修改好的内容写到新文件中
将老文件删除 将新文件的名字改成老文件名
import os


with open(r'test02.txt','r',encoding='utf-8') as read_f,\
        open(r'test02.swap','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('test02.txt')
os.rename('test02.swap','test02.txt')

 

"""
优点:内存中始终只有一行内容 不占内存
缺点:再某一时刻硬盘上会同时存在两个文件

"""

3 函数

"""
可以通过变量名找到变量对应的值
可以通过函数名+括号 找到函数体所对应的代码并执行

"""

函数名的命名规则跟变量名一模一样

函数就是工具,并且函数必须先定义后调用(函数名+括号)
def my_len():
    n = 0
    for i in s:
        n += 1
    print(n)
my_len()
my_len()
my_len()

l = [1,2,3,4,5]
m = 0
for j in l:
    m += 1
print(m)

  

 

转载于:https://www.cnblogs.com/cherish937426/p/11153853.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值