python_文件 处理

2020-11-10 21:57:40 浏览数 (1)


一、字符编码

  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

二、文件处理

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

读文件:

代码语言:javascript复制
 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()#结束之后必须关闭,否则占用内存

写文件:

代码语言:javascript复制
f = open( ‘new_2’, ‘w’,encoding=’utf-8’ )

print( f.readable() )#不可读

print( f.writable() )#可写

f.write( ‘888888n’ )#追加单行

f.write( ‘999999n’ )#追加

f.writelines( [ ‘787878n’ , ‘878787n’] )#追加多行

f.close()#关闭文件

追加:

代码语言:javascript复制
f=open('new_2','a',encoding='utf-8')

print(f.readable())        #不可读

print(f.writable())         #可写

f.write('888888n')       #追加单行

f.write('999999n')

f.writelines(['787878n','878787n'])       #追加多行

f.close()

#rb

f=open('aaaa.py','rb')    #以字节打开

print(f.read().decode('utf-8'))

拷贝图片:

代码语言:javascript复制
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('aaaaan'.encode('utf-8'))

*上下文管理:

代码语言:javascript复制
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)

循环取文件每一行内容:

代码语言:javascript复制
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='')

文件的修改:

方式一:只适用于小文件

代码语言:javascript复制
 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')

#方式二:

代码语言:javascript复制
 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)

往文件中写内容


0 人点赞