总结八

 

一.文件读写其他模式补充

r  w  a (可以看做纯净模式)

r+  w+  a+

先创建一个test文本文档,并输入内容:套你aabb猴子啊我

wiht 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()

  priint(res.decode('utf-8'))                 #  一

  res1 = str(res,encoding='utf-8')       #  二

  print(res1)

 

二.文件内光标移动

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

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

  print(f.read(5))

 

with open(r'test','rb') as f:

  res = f.read(10)    #  读得是三个字节bytes

  print(res)

  print(res.decode('utf-8'))

 

 

文件内光标的移动:

f.seek(offset,whence)

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

whence:

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

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

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

with open(r'test','rt',encoding='utf-8') as f:

  print(f.read(1))

  f.seek(6,0)  seek移动的都是字节数

  f.seek(4,0)  seek移动的都是字节数

 

  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'))

 

with open(r'test','rb') as f:

  print(f.read(3).decode('utf-8'))

  f.seek(3,1)

  print(f.read(1))

 

 

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('帅')     #  替换

 

 

写日志:

import time

res = time.strfttime('%Y-%m-%d %X')

print(res,type(res)

 

with open(r'test.txt','a',encoding='utf-8') as f:

  f.write('%s T给Z发了个大红包\n'%res)

 

检测文件内容:

with open(r'test.txt','rb') as f:

  # 先将光标移动到文件末尾

  f.seek(0,2)

  while True:

    res = f.readline()

    #查看光标移动了多少位 bytes

    # print(f.tell())

    if res:

      print("新增的文件内容:%s"%res.decode('itf-8'))

      # 说明有人操作当前文件

    #else:

      # 说明文件没有被任何人操作

      print('暂无其他人操作该文件')

 

截断文件:

wirh open(r'test','a',encoding='utf-8') as f:

  f.truncate(6)   # 接收的字节的长度  整型

  # 保留0~6字节数,后面的全部删除(截断)

        

 

修改文件(******)

with open(r'test','r+',encoding='utf-8') as f:

  f.seek(6,0)

  f.write('比')

 

修改文件方式一:

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

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

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

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

  data = f.read()

  print(data)

  print(type(data))

with open(r'test.txt','w',encoding='utf-8') as f:

  res = data.replace('T','Z')

  print(data)

  f.write(res)

 

"""

优点:任意时间硬盘上只有一个文件,不会占用过多的硬盘空间

缺点:当文件过大的情况下,可能会造成内存溢出

"""

文件修改方式二:

1.创建一个新文件

2.循环读取老文件内容到内存进行修改,将修改好的内容写到新文件中

3.将老文件删除,将新文件的名字改成老文件名

import os

with open(r'test.txt','r',encoding='utf-8') as read_f,\

    open(r'test.swap','a',encoding='utf-8') as write_f:

  for line in read_f:

    new_line = line.replace('Z'.'T')

    write_f.write(new_line)

os.remove('test.txt')

os.rename('test.swap','test.txt')

"""

优点:内存中始终只有一行内容,不占内存

缺点:在某一时刻硬盘上会同时存在两个文件

"""

三.函数前奏

s = ‘hello’

# print(len(s))

# 假设没有len了

# 函数体代码定义截断只检测语法 不执行代码

deft test():

  abcd

  efghij

  klmnopq

  rstuvwxyz

print(test())

"""

可以通过变量名找到变量对应的值

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

"""

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

函数就是工具,并且函数必须先定义后调用(函数名+括号)

 

# 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)


# 将for循环的代码放到某一个地方 谁要用谁就拿

 

转载于:https://www.cnblogs.com/TZZ1995/p/11154089.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值