文本操作2

简易版拷贝功能

1、获取待拷贝的目标文件路径

2、获取即将拷贝到目的地的路径

3、利用文件操作实现数据拷贝

1、待拷贝的文件路径

wait_copy_file = input('file path>>>:').strip()

2、新的文件路径

new_file_path = input('new path>>>:').strip()

3、以r模式打开步骤1的路径,以w模式打开步骤2的路径

with open (r'%s' % wait_copy_file,'rb') as f1,\

        open(r'%s' % new_file_path,'wb') as f2:

for line in f1:

        f2.write(line)

二进制模式读写操作

 with open(r'a.txt','rb') as f:
      print(f.read())
     print(f.read(6).decode('utf8'))


 with open(r'a.txt','r',encoding='utf8') as f:
    # print(f.read())
    # print(f.read(4))

"""
read()  括号内可以放数字
    在t模式下表示字符个数
    在b模式下表示字节个数
英文字符统一使用一个bytes来表示
中文字符统一使用三个bytes来表示
"""

文件内光标的移动

 with open(r'b.txt', 'rb') as f:
     print(f.read(4).decode('utf8'))
     print(f.tell())  # 查看光标移动了多少个字节
     f.seek(3, 1)
     print(f.read().decode('utf8'))
"""
控制文件内光标的移动  f.seek()
f.seek(offset,whence)
    offset表示位移量
        始终是以字节为最小单位
            正数从左往右移动
            负数从右往左移动
    whence表示模式
        0:以文件开头为参考系(支持tb两种模式)
        1:只支持b模式 以当前位置为参考系
        2:只支持b模式 以文件末尾为参考系
"""

# 小练习:实现动态查看最新一条日志的效果
 

import time
with open('a.txt', 'rb') as f:
    f.seek(0, 2)
    while True:
        line = f.readline()
        if len(line) == 0:
            # 没有内容
            time.sleep(0.5)
        else:
            print(line.decode('utf-8'), end='')

文件的内容修改

# 方式1 覆盖
 with open(r'c.txt','r',encoding='utf8') as f:
     data = f.read()
      print(type(data))
 with open(r'c.txt','w',encoding='utf8') as f1:
     new_data = data.replace('tony','jason')
     f1.write(new_data)

# 方式2 新建
import os
with open('c.txt', mode='rt', encoding='utf-8') as read_f, \
        open('c.txt.swap', mode='wt', encoding='utf-8') as write_f:
    for line in read_f:
        write_f.write(line.replace('SB', 'kevin'))
os.remove('c.txt')  # 删除原文件
os.rename('c.txt.swap', 'c.txt')  # 重命名文件

"""
自己总结两种方式的优缺点
"""

Guess you like

Origin blog.csdn.net/qq_64089078/article/details/121292329