python 文件数据修改

内容概要

  • 例题解析
  • 文件内光标的移动
  • 文件内数据的修改

内容详细

例题解析

            # 简易版本的拷贝功能
                1.获取待拷贝的目标文件路径
                2.获取即将拷贝到哪个地方的新路径
                3.利用文件操作实现数据拷贝

            # 待拷贝的文件路径
            wait_copy_file = input('file path>>>:').strip()
            # 新的文件路径
            new_file_path = input('new path>>>:').strip()
            # 以r模式打开步骤一的路径 以w模式打开步骤二的路径
            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).decod('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')  # 重命名文件

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


posted @ 2021-11-12 15:41  风花雪月*  阅读(221)  评论(0编辑  收藏  举报