• python_文件 处理


     


     

    一、字符编码

    1. 内存固定使用unicode编码
    2. 数据最先产生于内存中,是unicode格式,要想传输需要转成bytes格式

        # unicode -------> enconde( u t f - 8 ) -------> bytes

      拿到bytes,就可以往文件内存放或者基于网络传输

        # bytes --------> enconde( u t f - 8 ) -------> unicode

    1. python 3 中字符串被识别为 unicode

        python 3 中的字符串encode得到bytes

        python 2 中的字符串就是 bytes

        python 2 在字符串前加 ‘u’ ,就是unicode

    二、文件处理

    流程:打开文件===>得到文件句柄并赋值给变量 ====> 通过句柄操作文件==>关闭文件

    读文件:

     1 f = open( ‘aaaa.py ’ , ‘ r ’ ,encoding = ‘utf-8’ )
     2 
     3 print( f.readline() ,end= ‘’)#读取一行
     4 
     5 print( f.readlines() , end=’’ )#读取全部,不换行
     6 
     7 print( f.readable() )#可读文件
     8 
     9 print( f.writable() )#不可写文件
    10 
    11 f.close()#结束之后必须关闭,否则占用内存

    写文件:

    f = open( ‘new_2’, ‘w’,encoding=’utf-8’ )
    
    print( f.readable() )#不可读
    
    print( f.writable() )#可写
    
    f.write( ‘888888
    ’ )#追加单行
    
    f.write( ‘999999
    ’ )#追加
    
    f.writelines( [ ‘787878
    ’ , ‘878787
    ’] )#追加多行
    
    f.close()#关闭文件

    追加:

    f=open('new_2','a',encoding='utf-8')
    
    print(f.readable())        #不可读
    
    print(f.writable())         #可写
    
    f.write('888888
    ')       #追加单行
    
    f.write('999999
    ')
    
    f.writelines(['787878
    ','878787
    '])       #追加多行
    
    f.close()
    
    #rb
    
    f=open('aaaa.py','rb')    #以字节打开
    
    print(f.read().decode('utf-8'))

    拷贝图片:

    f=open('1.jpg','rb')      #以rb的方式打开1.JPG
    
    data=f.read()           #data获取读取到f的内容
    
    print(data)
    
    f2=open('3.jpg','wb')      #以写的方式打开
    
    f2.write(data)         #把data的内容写到f2
    
    f2.close()
    
    f.close()
    
    #ab,以二进制的形式追加
    
    f=open('new_3.txt','ab')
    
    f.write('aaaaa
    '.encode('utf-8'))

    *上下文管理:

    with open('aaaa.py','r',encoding='utf-8') as read_f,
    
            open('aaaa_new.py','w',encoding='utf-8') as write_f:
    
        data=read_f.read()
    
        write_f.write(data)

     

    循环取文件每一行内容:

    with open('a.txt','r',encoding='utf-8') as f:
    
        while True:
    
            line=f.readline()
    
            if not line:break
    
            print(line,end='')
    
     
        lines=f.readlines() #只适用于小文件
    
        print(lines)
     
    
        data=f.read()
    
        print(type(data))
    
    
        for line in f: #推荐使用
    
            print(line,end='')

    文件的修改:

    方式一:只适用于小文件

     1 import os
     2 
     3 with open('a.txt','r',encoding='utf-8') as read_f,
     4 
     5         open('a.txt.swap','w',encoding='utf-8') as write_f:
     6 
     7     data=read_f.read()
     8 
     9     write_f.write(data.replace('alex_SB','alex_BSB'))
    10 
    11  
    12 
    13 os.remove('a.txt')
    14 
    15 os.rename('a.txt.swap','a.txt')

     

    #方式二:

     import os
    
    with open('a.txt','r',encoding='utf-8') as read_f,
    
            open('a.txt.swap','w',encoding='utf-8') as write_f:
    
        for line in read_f:
    
            write_f.write(line.replace('alex_BSB','BB_alex_SB'))
    
     
    
    os.remove('a.txt')
    
    os.rename('a.txt.swap','a.txt')


    文件函数操作介绍

    函数

    说明

    file.read ( [ size ] )

    读取文件全部内容

    file.readline ( [ size ] )

    一行一行的读取

    file.readlines ( [ size ] )

    读取到的每一行内容作为list中的元素

    file.write ( str )

    将字符串写入文件

    file.writelines ( sequence or stringe)

    写多行到文件,参数可以是一个可迭代的object/list/tuple...

    file.close()

    关闭已经打开的文件

    file.fileno ( self )

    文件描述符

    file.flush ( self )

    刷新缓冲区的内容到硬盘

    file.isatty ( self )

    判断文件是否是 tty 设备,如果是 tty设备则返回True

    file.readable ( self )

    判断是否可读 ,如果可读返回True,否则返回False

    file.readline ( self , limit=-1 )

    每次仅读取一行数据

    file.readlines ( self , hint=-1 )

    把每一行内容当做列表(list)的一个元素

    file.tell(self)

    获取指针位置

    file.seek(self,offset, whence=io.SEEK_SET)

    指定文件中指针的位置

    file.seekable(self)

    指针是否可操作

    file.writable(self)

    是否可写

    file.writlines(self,lines)

    写入文件的字符串序列,序列可以是任何迭代的对象字符串

    file.read(self,n=None)

    读取指定字节数据,后面不加参数默认读取全部

    file.write(self,s)

    往文件中写内容

     


     

  • 相关阅读:
    5.win上安装ES
    6.入门案例:电商网站商品管理(一)
    BZOJ 1616 [Usaco2008 Mar]Cow Travelling游荡的奶牛:dp【网格型】
    BZOJ 1626 [Usaco2007 Dec]Building Roads 修建道路:kruskal(最小生成树)
    BZOJ 1614 [Usaco2007 Jan]Telephone Lines架设电话线:spfa + 二分【路径中最大边长最小】
    BZOJ 1612 [Usaco2008 Jan]Cow Contest奶牛的比赛:floyd传递闭包
    BZOJ 1609 [Usaco2008 Feb]Eating Together麻烦的聚餐:LIS & LDS (nlogn)
    POJ 2976 Dropping tests:01分数规划【二分】
    BZOJ 1607 [Usaco2008 Dec]Patting Heads 轻拍牛头:统计 + 筛法【调和级数】
    BZOJ 1605 [Usaco2008 Open]Crisis on the Farm 牧场危机:dp【找转移路径】
  • 原文地址:https://www.cnblogs.com/wangyuyang1016/p/10034791.html
Copyright © 2020-2023  润新知