zoukankan      html  css  js  c++  java
  • python 文件操作

    什么是文件?
    文件是操作系统提供给应用程序操作硬盘的的一个虚拟单位,用于应用程序将数据永久保存

    1.1文件基本操作

    打开文件:
    f = open(r'文件的路径',mode='模式',encoding='编码类型')
    f = open(r'a.txt',mode='r',encoding='unf-8')

    with open(r'a.txt',mode='r',encoding='unf-8') as f: #with,不需要使用.close()
    print('===>')
    print(f.read())

    读文件:
    data=f.read() #读出文件所有的内容
    print(data)
    关闭文件:
    f.close() #回收操作系统的资源

    f.write() #写
    f.read() #读
    f.flush() #刷新
    f.close() #关闭文件
    默认的打开文件的编码是:当前操作系统默认的编码,win:gbk,linux:utf-8
    f=open('a.txt',mode='r',encoding='utf-8')
    print(f.read())
    f.close()

    1.2打开模式和文件操作 (t 模式)

    文件的打开模式: t:text文本模式,读写文件是以字符串为单位,需要指定字符编码, t模式的局限性是只能读写文本文件 b:bytes字节模式,读写文件都是以bytes为单位,不需要指定字符编码 b模式的好处的是可以读写任意类型的文件

    1.21 r 只读

    只能读取(常用),文件不存在时报错, 文件存在,光标停在文件开头

    f=open('a.txt',mode='r',encoding='utf-8') # mode='rt'
    f.write('哈哈啊哈哈啊啊 啊啊123213213123 ') # 抛出异常,不能写
    print(f.readable()) #true
    f = open('a.txt', mode='r', encoding='utf-8')       #打印一行
    print(f.readline(),end='')   #f.readline(5),打印前五个字符,空:默认打印一行
    f.close() ##一次读一行
    f = open('a.txt', mode='r', encoding='utf-8')  ##读出文件所有的行存到列表中
    print(f.readlines()) #['aaaaaaaaaaaaaaa eeeeeeeee ', 'bbbbbbbbbbbbbb ']

    for line in f.readlines():       #循环文件不要使用该方式,因为在文件过大的情况下有可能会撑爆内存
    print(line,end='')

    1.22w 只写

    写入前清空文件内容(常用), 没有文件则新建, 文件存在,光标停在文件开头

    f=open(r'a1.txt',mode='w',encoding='utf-8') #默认是wt
    f.write('第一行 ')
    f.write('第二行 ')

    f.writelines(['111111 ','222222 ','333333 '])
    f.write('aaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbb ccccccccccccccc ')

    f.close()

    1.23 a 追加

    追加内容到文件末尾(常用),没有文件则新建 ,文件存在,光标停在文件末尾

    f = open('a.txt', mode='a', encoding='utf-8')
    print(f.writable())     #true
    f.readlines()    #报错

    f.write('5555555555555 ')
    f.writelines(['111111 ','222222 ','333333 '])
    f.close()

    强调: 写文件换行符用 读文件换行符也是

    1.3 打开模式和文件操作 (b 模式)

    文件的打开模式b模式 强调: 1、与t模式类似不能单独使用,必须是rb,wb,ab 2、b模式下读写都是以bytes单位的 3、b模式下一定不能指定encoding参数

    1.31 r 只读

    只能读取(常用),文件不存在时报错

    rb模式
    with open('1.jpg',mode='rb') as f:
        data=f.read()
        print(type(data))
        print(data.decode('utf-8'))

    with open('db.txt',mode='rb',) as f:
        data=f.read()
        print(data.decode('utf-8')) #bytes-----unicode
        print(type(data))
           
    with open('1.jpg','rb') as f:
        for line in f:
            print(line)

    1.32 w 只写

    写入前清空文件内容(常用), 没有文件则新建

    wb模式
    with open('b.txt',mode='wb') as f:
        msg='你好啊,吴三炮'
        f.write(msg.encode('gbk'))
    with open('b.txt',mode='wb') as f:
        msg='你好啊,吴三炮'
        f.write(msg.encode('utf-8'))

    1.33 a 追加

    追加内容到文件末尾(常用),没有文件则新建

    ab模式
    with open('b.txt',mode='ab') as f:
        f.write('你好'.encode('utf-8'))

    1.4 r+ 读写 / w+ 写读 / a+ 追加读写

    with open('b.txt',mode='r+t',encoding='utf-8') as f:
       print(f.readable()) #true
       print(f.writable()) #true
       print(f.readlines())
       f.write(' 吴大炮你好 ')
       for line in f.readlines():  
           print(line,end='')

     

    r+b 读写二进制 / w+b 写读二进制 / a+b 追加读写二进制

    1.5 文件修改

    修改文件方式一: 1、先把文件内容全部读入内存 2、然后在内存中完成修改 3、再把修改后的结果覆盖写入原文件 缺点:会在文件内容过大的情况下,占用过多的内存

    with open('user.txt',mode='r',encoding='utf-8') as f:
        data=f.read()
        data=data.replace('吴佩其','吴佩其[老男孩第二帅的人]')

    with open('user.txt',mode='w',encoding='utf-8') as f:
        f.write(data)

    修改文件方式二:

    1、以读的方式打开原文件,以写的方式打开新文件 2、读一行原文内容,写入新文件, 如果该行内容是需要修改的内容,那么修改完后再写入新文件 3、删掉原文件,将新文件名重命名为原文件名

    import os

    with open('user.txt',mode='rt',encoding='utf-8') as read_f,
           open('user.txt.swap',mode='wt',encoding='utf-8') as write_f:

       for line in read_f:
           if '吴佩其' in line:
               line=line.replace('吴佩其','吴佩其[老男汉特别特别的老]')

           write_f.write(line)

    os.remove('user.txt')
    os.rename('user.txt.swap','user.txt')

    1.6 光标

    with open('user.txt','r+',encoding='utf-8') as f:
        f.seek(9) #偏移量的单位是字节
        print(f.tell()) #获取当前光标位置
        print(f.read())
       
    with open('user.txt','r+',encoding='utf-8') as f:
        f.seek(9) #偏移量的单位是字节
        print(f.tell())
        f.write('[老男孩第二帅的人]')

     

     

  • 相关阅读:
    单个 js 文件禁用 ESLint 语法校验
    meta标签整合
    安装es6编译babel
    JSON.parse()和JSON.stringify()的区别
    preventDefault()、stopPropagation()、return false 的区别
    excel 表格内容读取
    redis 小例
    多文件打包下载
    随笔
    js数组删除元素
  • 原文地址:https://www.cnblogs.com/mylu/p/10981933.html
Copyright © 2011-2022 走看看