一、字符编码
- 内存固定使用unicode编码
- 数据最先产生于内存中,是unicode格式,要想传输需要转成bytes格式
# unicode -------> enconde( u t f - 8 ) -------> bytes
拿到bytes,就可以往文件内存放或者基于网络传输
# bytes --------> enconde( u t f - 8 ) -------> unicode
- 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) | 往文件中写内容 |