day8--文件管理2

文件处理的模式:

open("文件路径",''打开文件模式'','指定的字符编码')

print(f.edcoding)     ----可以查看文件的编码

文件打开模式补充

r+   w+   a+  

首先新建一个文本文档。填入内容。
with open(r'b.txt', 'r+', encoding='utf-8')as f:
  # print(f.writable())
  # print(f.readable())
  f.write('哈哈笑') # 打开的文件可以写入,写了三个文字,他替换了b.txt里面的前三个文字
  print(f.read())   #无法读出来刚刚写入的内容。因为with还没有执行完毕还没有存入硬盘

with open(r'b.txt', 'w+', encoding='utf-8')as f:
  f.write('123haha')   #打开的文件可以写入,直接覆盖了原来内容
  print(f.read())     #无法读出来刚刚写入的内容。因为with还没有执行完毕还没有存入硬盘

with open(r'b.txt', 'a+', encoding='utf-8')as f:
  f.write('小狗,小猫咪')   #可以添加,他会直接在文档后面添加。
  print(f.read())   #现在是读不出来。需要移动光标才可以读,因为光标在最后面
                      # 执行一次,内容就添加一次

文件内光标的移动

f.seek(offset,whence)

f.seek(offset,whence)

offset: 相对偏移度 (光标移动的位数)针对的是字节

whence:指定光标位置从何开始   

0:从文件开头   

1:从当前位置   

2:从文件末尾

补充:   

utf-8:

        中文是3个bytes        英文是1个bytes   

gbk:

        全部都是2个bytes   

open函数不设置encoding,默认是gbk   

与encode一毛钱都没有,encoding只是一个参数   

除了read里面的参数是针对字符,其他都是针对字节

with open(r'b.txt','r',encoding='utf-8')as f:
  print(f.tell())   # 查看光标的位置
  f.seek(2, 0)     # 2代表光标移动的字节,0是从头开始。
  print(f.read(2)) # 在光标位置开始读取2个字符。

with open(r'b.txt','rb')as f:
  f.read(3)   #光标移动3个字节,二进制中是一个汉字。
  f.seek(6, 1) # 光标在当前位置移动6个字节。即2个汉字
  print(f.tell()) #光标在地9个字节那边
  # print(f.read(3))
  print(f.read(3).decode('utf-8'))   #解码2进制字符转化为文字
   
with open(r'b.txt', 'rb')as f:
  f.seek(-6, 2)
  print(f.tell())
  print(f.read(3).decode('utf-8'))

修改文件内容

将文件中经费改为钱
第一种方案:
with open(r'b.txt','r',encoding=('utf-8'))as f:
  data = f.read()
  # print(data)
  # print(type(data))
with open(r'b.txt', 'w', encoding=('utf-8'))as f:
  des = data.replace('经费', '钱')
  f.write(des)

第二种方案
import os
with open(r'b.txt', 'r', encoding=('utf-8'))as rf,\
      open(r'a.txt', 'w', encoding=('utf-8'))as wf:
  data = rf.read()   #赋值变量名为data
  res = data.replace('经费', '钱')
  wf.write(res)

os.remove('b.txt')     #删除b.txt
os.rename('a.txt','b.txt')#   改名字a.txt改为b.txt

写入文件:

# 写入文件
import time
time = time.strftime('%Y:%m:%d %H:%M:%S')
with open(r'b.txt', 'a', encoding=('utf-8'))as f:
  for i in range(3):
      f.write(f'{time}:到周末了,可以休息了,好开心\n')

获取文件实时动态:

# 写入文件
import time
time = time.strftime('%Y:%m:%d %H:%M:%S')
with open(r'b.txt', 'a', encoding=('utf-8'))as f:
  for i in range(3):
      f.write(f'{time}:到周末了,可以休息了,好开心\n')
posted @ 2019-11-08 18:36  猫-园  阅读(82)  评论(0编辑  收藏  举报