zoukankan      html  css  js  c++  java
  • 6.文件基本操作

    文件操作模式

    打开文件的两种方式

    f = open('a.txt', mode='rt', encoding='utf-8')
    ''' f是文件的对象,括号内的第一个对象是文件的地址,可以是相对地址,也可以是绝对地址;
    中间的对象是你选择要执行的模式,如果你只写主模式(纯净模式),默认从模式为t模式即文本模式,中间的mode可以省略;
    第三个是编码格式一般用utf-8,在t模式下,必须标明编码格式,b模式下一定不要标明编码格式
    '''
    f.read()
    f.close()  # 这里只是关闭了文件,并没有回收对象的资源
    print(f)  # 结果为<_io.TextIOWrapper name='a.txt' mode='rt' encoding='utf-8'>
    方式一
    with open('a.txt', mode='rt', encoding='utf-8') as f:
        ''' f是文件的对象,括号内的第一个对象是文件的地址,可以是相对地址,也可以是绝对地址;
        中间的对象是你选择要执行的模式,如果你只写主模式(纯净模式),默认从模式为t模式即文本模式,中间的mode可以省略;
        第三个是编码格式一般用utf-8,在t模式下,必须标明编码格式,b模式下一定不要标明编码格式;
        它会自动关闭文件,不需要手动书写代码
        '''
        f.read()
    
    print(f)  # 结果为<_io.TextIOWrapper name='a.txt' mode='rt' encoding='utf-8'>
    方式二
    with open('a.txt', mode='rt', encoding='utf-8') as f,open('b.txt', mode='rt', encoding='utf-8') as f1:
        pass
    多文件打开方式

    读写文件

    文件内容

    床前明月光,疑是地上霜
    举头望明月,低头思故乡

    1.read()

    读取文件所有内容,当文件不存在时,报错

    read内可以有参数,且参数为数字。在rt模式下,数字代表的是字符,除次之外,数字代表的是字节

    f = open(r'libai',encoding = 'utf-8')
    print(f.read())
    
    床前明月光,疑是地上霜
    举头望明月,低头思故乡

    2.readline()

    只读取一行内容,若文件不存在则报错

    f = open('libai',encoding = 'utf-8')
    
    print(f.readline())
    
    床前明月光,疑是地上霜

    3.readlines()

    把文章内容以换行符分割,并生成list格式(数据量大的时候不建议用)

    f = open('libai',encoding = 'utf-8')
    
    print(f.readlines())
    
    ['床前明月光,疑是地上霜\n', '举头望明月,低头思故乡']

    4.二进制读取“rb”

    复制代码
    #rb  二进制模式读取
    f = open('libai','rb')  #主要用于网络传输
    print(f.readline())

    b'\xe5\xba\x8a\xe5\x89\x8d\xe6\x98\x8e\xe6\x9c\x88\xe5\x85\x89\xef\xbc\x8c\xe7\x96\x91\xe6\x98\xaf\xe5\x9c\xb0\xe4\xb8\x8a\xe9\x9c\x9c\r\n'

    5.二进制写“wb”

    f = open('libai','wb')
    f.write('中文'.encode())    

    flush,tell,truncate和游标操作

    1.flush

    将内存中文件刷新到硬盘中

    2.tell

    查看当前光标移动多少字节

    3.truncate

    截断文件内容

    4.游标

    f.seek(offset,whence)
    offset:相对偏移量 光标移动的位数(默认是从左往右,偏移量是字节个数,中文在utf-8内是三个字节,英文是一个字节)
    whence:
        0:参照文件的开头   t和b都可以使用,在rt+或r+b模式下,如果游标不在末尾,将从游标的位置后进行覆盖
    如果游标在末尾,则进行添加操作
        1:参照光标所在的当前位置  只能在b模式下用。r+b模式下,如果游标不在末尾,将从游标的位置后进行覆盖如果游标在末尾,则进行添加操作
        2:参照文件的末尾只能在b模式下使用

    文件修改的两种方式

    '''文件修改
    逻辑思维1:1. 把文件从硬盘读到内存中(即打开文件)
              2. 将文件内容一次性全部读取出来,赋值给data变量
              3. 对data变量进行修改操作
              4. 打开文件,将被修该好的变量写入到文件中(即将文件保存到硬盘中。     
    '''
    with open('a.txt', 'r', encoding='utf-8') as f:
        data = f.read()
        data = data.replace('is', 'shji')
    with open('a.txt', 'r', encoding='utf-8') as f:
        f.write(data)
    '''
    文件的拷贝
              1.  把文件从硬盘读到内存中(即打开文件),同时新建另一个文件b.txt.
              2.  一行一行读取文件并将文件追加到新文件中。
              3.  删除老文件,并将新文件重新命名
    
    '''
    import os
    
    with open('a.txt', 'r', encoding='utf-8') as f, open('b.txt', 'a', encoding='utf-8') as f1:
        for line in f:
            f1.write(line)
    os.remove('a.txt')
    os.rename('b.txt', 'a.txt')
    '''文件的修改
    逻辑思维2:1.  把文件从硬盘读到内存中(即打开文件),同时新建另一个文件b.txt.
              2.  一行一行读取文件并将修改后的文件内容追加到新文件中。
              3.  删除老文件,并将新文件重新命名'''
    import os
    
    with open('a.txt', 'r', encoding='utf-8') as f, open('b.txt', 'a', encoding='utf-8') as f1:
        for line in f:
            line = line.replace('is', 'shji')
            f1.write(line)
    os.remove('a.txt')
    os.rename('b.txt', 'a.txt')
    文件修改和拷贝

     编码转换

     方法

  • 相关阅读:
    JS设计模式的坑
    nth-child()和nth-of-type()的区别,以及如何在nth中添加变量和表达式
    for循环中,使用闭包和不使用闭包的区别以及原因
    JS闭包的基础知识,闭包的本质,闭包的作用,闭包的间谍属性和闭包的遗憾
    前端和后端数据交互的基本知识和常见方式
    dedecms手机PC同步更新插件的bug修复和前后端调试的经验
    065 女神颜值打分系统
    029 令牌桶算法限流
    04-01 集成学习基础
    028 【博弈论】关于三姬分金(五海盗分赃)的博弈论问题分析
  • 原文地址:https://www.cnblogs.com/cmd61/p/11094180.html
Copyright © 2011-2022 走看看