zoukankan      html  css  js  c++  java
  • 文件处理

    文件处理

    '''
    什么是文件?
        操作系统将复杂的硬件操作包装成一个简易的接口
    为什么操作文件?
        人或程序需要永久的存储数据
    '''
    # 通过Python代码来操作文件
    # 打开文件 open(r"D:pyday07111.txt",encoding='utf-8')  # 操作系统,默认编码为gbk
    # r 取消转义
    # f = open(r"D:pyday07111.txt",encoding='utf-8')  # f为文件对象.f也是一个变量名
    # print(f.read())  # 将文件中的内容全部读出
    # f.close()  # 告诉操作系统将文件关闭
    
    # 这样每次用完文件都要告诉操作系统关闭文件太过麻烦.接下来介绍一种比较简单的方法
    # with open(r"D:pyday07111.txt",encoding='utf-8') as f:  f仅仅是个变量名,可以把它理解为遥控器
    #     print(f)
    #     print(f.read())
    
    # 文件打开方式:
    # r 只读
    # w 只写
    # a 追加写模式
    
    # 操作文件单位方式
    # t 文本文件  文本文件在使用是一定要标明encoding模式.不然会采用系统默认编码GBk
    # b 二进制  一定不能标明encoding  该模式是直接用二进制进行传输
    
    
    # mod参数可以不写,默认情况下是rt模式   如果只写了r w a默认情况下rt wt at
    # with open(r'D:pyday07111.txt',mode = 'r',encoding='utf-8') as f:
        # print(f.readable())  # 可读
        # f.write('aaaaa')  # 直接报错,在r模式下只能读
    
    # r 模式下打开文件,如果文件不存在直接报错
    # with open(r'D:pyday07111.txt',mode = 'r',encoding='utf-8') as f:
        # print(f.read())  # 将文件内容一次性全部读出
        # print(f.readline())  # 将文件内容一行读出,如果文件内容过大,一次性全部读出可能会导致内存爆炸,逐行减轻内存压力
        # print(f.readline())
        # print(f.readline())
        # print(f.readlines())  # 返回一个列表,列表中每个元素与文件中的行一一对应
        # 也可以使用for循环将文件每行全部读出
        # for line in f:
        #     print(line)
    
    
    # w模式,w模式在文件存在时,会将文件清空,再进行写入,在文件不存在时会新建一个文件
    # l = ['阿挺冲冲冲
    ','阿挺冲冲冲
    ','阿挺冲冲冲
    ']
    # with open(r'D:pyday07	est.txt',mode='w',encoding='utf-8') as f:
        # print(f.readable())  # 在w模式下只能写不能读
        # print(f.writable())
        # f.write('asdasdasd')  # 文件内容会直接清空,重新写入
        # f.writelines(l)  # 可以输入容器类型,内部就是for循环
        # for line in l:
        # f.write(line)
    
    # a模式,a模式在文件不存在时会新建一个文件,在文件存在时不会清空文件,会将光标移动到末尾进行添加
    # with open(r'D:pyday07	est.txt',mode='a',encoding='utf-8') as f:
    #     print(f.readable())  # a模式下只能写,不能读
    #     print(f.writable())
    #     f.write('chongchong
    ')  # 在文件末尾直接进行添加
    '''
    r
    w
    a
    以上三种为纯净模式
    r+
    w+
    a+
    这三个模式均为可读可写模式,但这种模式很low,一般情况下只用纯净模式
    '''
    # 在r+模式下打开一个没有创建的文件,会直接报错,并不会直接创建文件
    # with open(r'111.txt','r+',encoding='utf-8') as f:
    #     print(f.readable())  # True
    #     print(f.writable())  # True
    #     print(f.readline())  # 文件光标移到第一行末尾
    #     f.write('heiheihei')  # 虽然文件光标在第一行末尾,在写入的情况下,会直接在文件末尾 进行添加
    
    
    # with open(r'111.txt','w+',encoding='utf-8') as f:
    #     print(f.readable())  # True
    #     print(f.writable())  # True
    #     print(f.readline())
    #     f.write('heiheihei')
    
    # with open(r'111.txt','a+',encoding='utf-8') as f:
    #     print(f.readable())  # True
    #     print(f.writable())  # True
    
    
    # 在rt模式下read()内加的数字都是字符个数,其他模式下都是字节个数
    光标在文件中的移动
    '''
    f.seek(offset,whence)
    offset:相对偏移量  光标移动位数(字节数)
    whence:
        0 参照文件的开头  t和b都可以使用
        1 参照光标当前位置  只有b模式可以使用
        2 参照文件的末尾  只有b模式可以使用
    '''
    # with open(r'111.txt','rt',encoding='utf-8') as f:
    #     print(f.read(1))  # 读取一个字符
    #     f.seek(6,0)  # 相对文件开头移动6个字节
    
    
    # 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('过')  # 直接将字符进行替换
    View Code
    检测文件是否新加内容
    # 检测文件是否新加内容
    # with open(r'111.txt','rb') as f:
    #     f.seek(0,2)
    #     while True:
    #         res = f.readline()
              # 查看光标移动了多少位 bytes
              # print(f.tell())
    #         if res:
    #             print('新增内容:%s'%res.decode('utf-8'))
    #             说明有人在操作文件
    
    
    # with open(r'111.txt','r',encoding='utf-8') as f:
    #     f.read()
    #     while True:
    #         res = f.readline()
    #         if res:
    #             print('新增内容:%s'%res)
    View Code
    # 截断文件
    # 截断文件
    # with open(r'111.txt','a',encoding='utf-8') as f:
    #     f.truncate(3)  # 截断直接从文件头开始,截断的是字节个数

    修改文件

    # 修改文件
    # 先将数据由硬盘读到内存(读文件)
    # 在内存中完成修改(字符串的替换)
    # 再覆盖原来的内容(写文件)
    
    
    
    
    # with open(r'111.txt','rt',encoding='utf-8') as f:
    #     data = f.read()
    # with open(r'111.txt','w',encoding='utf-8') as f:
    #     f.write(data.replace('nmsl','egon'))
    # 这种修改方式优缺点
    # 优点:任意时间yp上都只有一个文件  不会过多占用硬盘空间
    # 缺点:在文件内容过大时,内存可能会溢出
    
    
    
    
    
    
    
    # 文件修改方式2
    # 新建一个文件,并且将老文件中内容全部读到内存并进行修改
    # 将修改好的内容写入新文件,用新文件代替老文件  直接将老文件删除,把新文件命名为老文件
    
    import os
    with open(r'111.txt','r',encoding='utf-8') as f ,
        open(r'123.txt','w',encoding='utf-8') as n:
        for line in f:
            new_line = line.replace('nmsl','egon')
            n.write(new_line)
    os.remove('111.txt')
    os.rename('123.txt','111.txt')
    
    
    # 优点:不需要考虑文件内容是否会溢出内存
    # 缺点:在硬盘中会存在两个文件,占用硬盘资源
    View Code


  • 相关阅读:
    mysql 严格模式 Strict Mode
    PHP中NULL和‘'的区别
    nginx 出现413 Request Entity Too Large问题的解决方法
    mysql 转换NULL数据方法
    mysql大小写敏感配置
    mysql导入大批量数据出现MySQL server has gone away的解决方法
    mysql函数concat与group_concat使用说明
    Linux下aMule安装教程
    四、YOLO-V1原理与实现(you only look once)
    tf.cast(ndarray,dtype)
  • 原文地址:https://www.cnblogs.com/asdaa/p/11147223.html
Copyright © 2011-2022 走看看